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: notfound"라는 메시지가 나타납니다. 하지만 값을 해당 줄에 수동으로 연결하고 명령줄에서 실행하면 작동합니다.

내 첫 번째 생각은 그것이 shebang 라인이라는 것이었지만 #! /bin/sh옳았어야 하지 않겠습니까? 그것은 확실히 올바른 폴더이며 다른 /etc/init.d 스크립트에서 사용하는 폴더입니다.

내 두 번째 생각은 그것이 sudo와 관련이 있다는 것입니다. 저는 sudo가 아닌 곳에서 start-stop-daemon을 테스트하고 sudo 모드에서 /etc/init.d/ar_sendmail을 실행했습니다. 하지만 sudo로도 start-stop-daemon을 잘 실행할 수 있습니다.

좀 당황스럽네요. 어떤 아이디어라도 있나요?

답변1

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

문제가 있습니다.

/sbin에서 PATH찾을 수 없도록 변수를 방해하고 있습니다.start-stop-daemon

다음을 사용해 보세요:

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

아니면 대신 비슷한 것.

관련 정보