2016-11-29 101 views
0

我正在嘗試爲我的screeps私人服務器創建一個init.d腳本。我遇到了一些問題。Screeps私人服務器配置init.d

  1. 我想運行一個後臺程序用戶screeps不是root screeps-daemon
  2. 我想,以確保它在正確的工作目錄下運行。

使用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的命令行引用反引號。這將導致shell執行命令:

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

然後追加任何返回到後su命令行「蘇 - screeps守護-C」。

很可能是運行foreverApp命令和它返回

嘗試用單引號引用',而不是反引號`(其中「--minUptime」很可能產生這是)幫助消息的錯誤

sudo - screeps-daemon -c \ 
    "$foreverApp start --workingDir $workingDir $nodeApp $command --password <my-password> --runners_cnt 4 --processors_cnt 4" 

runners_cntprocessors_cnt應根據國內外衆多處理器核心來設置要全身心地投入到T:

0

我通過更換你的執行腳本來修正這個問題他嘲笑服務器。

別忘了跑sudo update-rc.d <scriptname> defaults