2011-11-26 58 views
0

我是一個運行Debian 6的新Linode/Linux用戶。我試圖讓我的Unicorn服務器在啓動時啓動,但由於某種原因它不是,而且我也不是能夠追蹤任何錯誤信息。 Nginx運行良好,我有一個多用戶RVM安裝。我的直覺是,這與RVM有關。這是我unicorn_init.sh文件中/rails/todo,在/etc/init.d/unicorn有一個符號鏈接到它:Linode Deban Linux + Nginx + unicorn_rails

# 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/[email protected]" 
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 

回答

2

update-rc.d: error: insserv rejected the script header

你的文件的開頭是這樣的:

# unicorn_init.sh 
#!/bin/sh 

shebang行(#!/bin/sh)必須是在第一行文件。

我不能評論環路檢測消息,因爲我從未見過他們之前。你可能在/etc/init.d/nginx中表達了對獨角獸的依賴,但是我沒有看到表示對nginx依賴的unicorn init中的任何東西,所以循環不清晰。

insserv: warning: script 'unicorn' missing LSB tags and overrides

你應該資訊加入到LSB你的初始化腳本http://wiki.debian.org/LSBInitScripts

+0

它是缺失的LSB信息這是問題。第一條評論僅僅是爲了這篇文章 - 我應該注意到這一點。 – clem