start-stop-daemon 在命令列中工作,但在 /etc/init.d 腳本中不起作用

start-stop-daemon 在命令列中工作,但在 /etc/init.d 腳本中不起作用

我正在嘗試在 /etc/init.d/ar_sendmail 中獲取一個啟動腳本(用於名為 ar_sendmail 的 ruby​​ gem):

#! /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 中測試啟動-停止守護程序並在 sudo 模式下運行 /etc/init.d/ar_sendmail 。但是,我也可以使用 sudo 來運行 start-stop-daemon 。

有點困惑,有什麼想法嗎?

答案1

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

這就是你的問題。

您正在破壞PATH變量,因此無法start-stop-daemon在 /sbin 中找到它

嘗試使用:

PATH=${PATH}:/var/lib/gems/1.8/bin

或類似的東西代替。

相關內容