2016-11-29 3 views
0

Я пытаюсь создать сценарий init.d для своего личного сервера screeps. У меня проблемы с несколькими вещами.Конфигурация личного сервера Screeps init.d

  1. Я хочу запустить screeps с пользователем демон не укореняются 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 

Это, вероятно, что-то просто разглядывания меня в лицо, но я не могу видеть это прямо сейчас.

ответ

1

Похоже, что командная строка, которую вы используете для su, цитируется обратными окнами. Это заставит оболочку, чтобы выполнить команду:

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

, а затем добавить все, что возвращается к командной строке су после «су - screeps-демон -c».

Скорее всего, ошибка запуск, что команда foreverApp и возвращает сообщение справки (что, где «--minUptime», вероятно, был создан)

Try квотирования с единственной цитатой 'вместо `кавычки

0

Я исправил проблему, заменив сценарий выполнения на:

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

runners_cnt Где и processors_cnt должны быть установлены в зависимости от дома много ядер процессора вы хотите посвятить т он визжит сервер.

Не забудьте запустить sudo update-rc.d <scriptname> defaults

Смежные вопросы