2011-03-08 87 views
1

我試圖在/etc/init.d中獲得一個啓動腳本(用於名爲ar_sendmail的ruby gem)/ar_sendmail:start-stop-daemon在命令行工作,但在/etc/init.d腳本中不起作用

#! /bin/sh 

echo "in /etc/init.d/ar_sendmail" 
DIR=/home/max/work/e_learning_resource/trunk 
PATH=/var/lib/gems/1.8/bin 
DAEMON=/var/lib/gems/1.8/bin/ar_sendmail 
DAEMON_OPTS="-e production -d --batch-size 100 --delay 150" 
NAME=ar_sendmail 
DESC=ar_sendmail 
PID_FILE=/home/max/work/e_learning_resource/trunk/shared/log/ar_sendmail.pid 


test -x $DAEMON || exit 0 
set -e 

case "$1" in 
    start) 
     echo -n "Starting $DESC: " 
     start-stop-daemon -d $DIR --start --quiet --pidfile $PID_FILE \ 
       --exec $DAEMON -- $DAEMON_OPTS 
     echo "$NAME." 
     ;; 
    stop) 
     echo -n "Stopping $DESC: " 
     kill -TERM `cat $PID_FILE`   
    rm $PID_FILE 
     echo "$NAME." 
     ;; 
    restart) 
     echo -n "Restarting $DESC: " 
     kill -TERM `cat $PID_FILE`   
    rm $PID_FILE 
     sleep 1 
     start-stop-daemon -d $DIR --start --quiet --pidfile \ 
       $PID_FILE --exec $DAEMON -- $DAEMON_OPTS 
     echo "$NAME." 
     ;; 
     *) 
      N=/etc/init.d/$NAME 
      echo "Usage: $N {start|stop|restart|reload}" >&2 
      exit 1 
      ;; 
    esac 

    exit 0 

它的啓動 - 停止 - 守護線吹起來,說:「啓動 - 停止守護程序:未找到」。但是,當我手動將值插入該行時,並在命令行上運行它時,它可以正常工作。

我的第一個想法是它是shebang線,但#! /bin/sh應該是正確的嗎?這絕對是正確的文件夾,以及我在其他/etc/init.d腳本中使用的文件夾。

我的第二個想法是,它與sudo相關:我一直在測試非sudo中的start-stop-daemon並在sudo模式下運行/etc/init.d/ar_sendmail。但是,我也可以用sudo運行start-stop-daemon。

那種難倒,有什麼想法?

+1

檢查你正在覆蓋PATH變量的行,停止訪問/ sbin,/ usr/sbin等。你可能想讓PATH = $ PATH:/ blah/blah,或者顯式添加必要的目錄。 – vhallac

+0

@Dysaster,應該是一個答案... – sarnold

+0

@sarnold真的,不知道我爲什麼使用評論。 :) – vhallac

回答

0

將一個source /etc/profile添加到腳本的開頭,以便您獲得路徑設置。

2

由於@Dysaster所指出的,你這條線覆蓋你PATH

PATH=/var/lib/gems/1.8/bin 

因爲你給的完整路徑名守護進程,我想你大概不甚至需要將/var/lib/gems/1.8/bin添加到您的路徑,除非ar_sendmail需要執行該目錄中的程序而不知道它們的路徑。 (這肯定是不幸的,但很容易用:PATH=/var/lib/gems/1.8/bin:$PATH修復。)

相關問題