我是一个运行Debian 6的新Linode / Linux用户。我试图让我的Unicorn服务器在启动时启动,但由于某种原因,它不是,我无法追查任何错误信息。 Nginx开始正常,我有一个多用户RVM安装。 我的直觉是这与RVM有关。 这是/rails/todo我的unicorn_init.sh文件,在/etc/init.d/unicorn有一个符号链接:
# unicorn_init.sh #!/bin/sh set -e TIMEOUT=${TIMEOUT-60} APP_ROOT=/rails/todo PID=$APP_ROOT/tmp/pids/unicorn.pid CMD="$APP_ROOT/bin/unicorn_rails -D -c $APP_ROOT/config/unicorn.rb -E production" GEM_HOME="/usr/local/rvm/gems/ruby-1.9.2-p290@global" action="$1" set -u old_id="$PID.oldbin" cd $APP_ROOT || exit 1 export GEM_HOME=$GEM_HOME sig () { test -s "$PID" && kill -$1 `cat $PID` } oldsig () { test -s $old_pid && kill -$1 `cat $old_pid` } case $action in start) sig 0 && echo >&2 "Already running" && exit 0 su -c "$CMD" - root ;; stop) sig QUIT && exit 0 echo >&2 "Not running" ;; force-stop) sig TERM && exit 0 echo >&2 "Not running" ;; restart|reload) sig HUP && echo reloaded OK && exit 0 echo >&2 "Couldn't reload, starting '$CMD' instead" su -c "$CMD" - root ;; upgrade) if sig USR2 && sleep 2 && sig 0 && oldsig QUIT then n=$TIMEOUT while test -s $old_pid && test $n -ge 0 do printf '.' && sleep 1 && n=$(( $n - 1 )) done echo if test $n -lt 0 && test -s $old_pid then echo >&2 "$old_pid still exists after $TIMEOUT seconds" exit 1 fi exit 0 fi echo >&2 "Couldn't upgrade, starting '$CMD' instead" su -c "$CMD" - root ;; reopen-logs) sig USR1 ;; *) echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>" exit 1 ;; esac
我99%的方式让我的设置工作 – 任何意见将不胜感激。
这里是$ update-rc.d unicorn defaults的输出:
update-rc.d: using dependency based boot sequencing insserv: warning: script 'unicorn' missing LSB tags and overrides insserv: There is a loop between service nginx and unicorn if stopped insserv: loop involving service unicorn at depth 2 insserv: loop involving service nginx at depth 1 insserv: Stopping unicorn depends on nginx and therefore on system facility `$all' which can not be true! insserv: exiting now without changing boot order! update-rc.d: error: insserv rejected the script header
Shebang( #!/bin/sh )应该是脚本的第一行
编辑:
在任何应用程序的特定设置之前,请将下面的内容放在后面
### BEGIN INIT INFO # Provides: APPLICATION # Required-Start: $all # Required-Stop: $network $local_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start the APPLICATION unicorns at boot # Description: Enable APPLICATION at boot time. ### END INIT INFO # # Use this as a basis for your own Unicorn init script. # Make sure that all paths are correct. set -u set -e
它肯定会摆脱LSB的警告。