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

start-stop-daemon 行でエラーが発生し、「start-stop-daemon: not found」と表示されます。ただし、その行に手動で値を入力してコマンド ラインで実行すると、正常に動作します。

最初はシェバン行だと思いましたが、#! /bin/sh正しいはずですよね? これは間違いなく正しいフォルダーであり、他の /etc/init.d スクリプトで使用しているものです。

2 番目に考えたのは、これは sudo に関連しているということでした。私は、start-stop-daemon を非 sudo モードでテストし、/etc/init.d/ar_sendmail を sudo モードで実行していました。しかし、start-stop-daemon は sudo でも問題なく実行できます。

ちょっと困惑しています。何かアイデアはありますか?

答え1

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

そこに問題がある。

変数を上書きしているため、 /sbinでPATH見つけることができませんstart-stop-daemon

以下をお試しください:

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

または、それに似たもの。

関連情報