2016-11-29 43 views
0

私のscreepsプライベートサーバ用のinit.dスクリプトを作成しようとしています。私はいくつかの問題を抱えています。Scriepsプライベートサーバの設定init.d

  1. 私はそれが正しいの作業ディレクトリで実行されていることを確認したいscreeps-daemon
  2. をルートでないデーモンユーザーとscreepsを実行したいです。 initd-foreverを使用して

私は次のように生成された:

#!/bin/bash 
### BEGIN INIT INFO 
# If you wish the Daemon to be lauched at boot/stopped at shutdown : 
# 
# On Debian-based distributions: 
#  INSTALL : update-rc.d scriptname defaults 
#  (UNINSTALL : update-rc.d -f scriptname remove) 
# 
# On RedHat-based distributions (CentOS, OpenSUSE...): 
#  INSTALL : chkconfig --level 35 scriptname on 
#  (UNINSTALL : chkconfig --level 35 scriptname off) 
# 
# chkconfig:   2345 90 60 
# Provides:   /usr/local/bin/screeps 
# Required-Start: $remote_fs $syslog 
# Required-Stop:  $remote_fs $syslog 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: forever running /usr/local/bin/screeps 
# Description:  /usr/local/bin/screeps 
### END INIT INFO 
# 
# initd a node app 
# Based on a script posted by https://gist.github.com/jinze at https://gist.github.com/3748766 
# 

if [ -e /lib/lsb/init-functions ]; then 
    # LSB source function library. 
    . /lib/lsb/init-functions 
fi; 

pidFile="/var/run/forever/screeps.pid" 
logFile="/var/run/Screeps.log" 
workingDir="/var/local/screeps" 

command="start" 
nodeApp="/usr/local/bin/screeps" 
foreverApp="/usr/local/bin/forever" 

start() { 
    echo "Starting $nodeApp" 

    # Notice that we change the PATH because on reboot 
    # the PATH does not include the path to node. 
    # Launching forever with a full path 
    # does not work unless we set the PATH. 
    PATH=/usr/local/bin:$PATH 
    export NODE_ENV=production 

    su - screeps-daemon -c \ 
    `foreverApp start --workingDir $workingDir --pidFile $pidFile -l $logFile -a -d -c "$command" $nodeApp` 
    RETVAL=$? 
} 

restart() { 
    echo -n "Restarting $nodeApp" 
    $foreverApp restart $nodeApp 
    RETVAL=$? 
} 

stop() { 
    echo -n "Shutting down $nodeApp" 
    $foreverApp stop $nodeApp 
    RETVAL=$? 
} 

status() { 
    echo -n "Status $nodeApp" 
    $foreverApp list 
    RETVAL=$? 
} 

case "$1" in 
    start) 
     start 
     ;; 
    stop) 
     stop 
     ;; 
    status) 
     status 
     ;; 
    restart) 
    restart 
     ;; 
    *) 
     echo "Usage: {start|stop|status|restart}" 
     exit 1 
     ;; 
esac 
exit $RETVAL 

しかし、私は次のエラーを取得しています:

sudo /etc/init.d/screeps start                                 [email protected] 
Starting /usr/local/bin/screeps 
su: unrecognized option '--minUptime' 
Usage: su [options] [LOGIN] 

Options: 
    -c, --command COMMAND   pass COMMAND to the invoked shell 
    -h, --help     display this help message and exit 
    -, -l, --login    make the shell a login shell 
    -m, -p, 
    --preserve-environment  do not reset environment variables, and 
           keep the same shell 
    -s, --shell SHELL    use SHELL instead of the default in passwd 

それはおそらく顔で私をstareing単純なものだが、私は見ることができませんそれは今です。

答えて

1

suのために使用しているコマンドラインがバッククォートで引用されているようです。

foreverApp start --workingDir $workingDir --pidFile $pidFile -l $logFile -a -d -c "$command" $nodeApp 

をして、後にsuコマンドラインへ返すものは何でも追加「SU - screepsデーモン-c」:これは、シェルコマンドを実行します。

foreverAppコマンドは、それが

てみてくださいではなく、バッククォート ` 'の単一引用符と引用(「--minUptimeは」おそらく生成されたことがあります)ヘルプメッセージを返していることを実行しているエラーが発生しているほとんどの場合

0

私はして実行スクリプトを置き換えることによって、問題を修正:

runners_cntprocessors_cntは、あなたがトンに捧げたいホーム多くのプロセッサコアに応じて設定する必要があります
sudo - screeps-daemon -c \ 
    "$foreverApp start --workingDir $workingDir $nodeApp $command --password <my-password> --runners_cnt 4 --processors_cnt 4" 

彼はサーバーを偵察する。

実行することを忘れないでください。sudo update-rc.d <scriptname> defaults