start-stop-daemon работает в командной строке, но не работает в скрипте /etc/init.d

Я пытаюсь получить начальный скрипт (для ruby ​​gem с именем ar_sendmail), работающий в /etc/init.d/ar_sendmail:

#! /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

Он взрывается в строке старт-стоп-демон, говоря: «старт-стоп-демон: не найден». Но когда я подставляю значения в эту строку вручную и запускаю ее в командной строке, она работает.

Моей первой мыслью было, что это линия шебанга, но #! /bin/sh должно быть правильно, не так ли? Это определенно правильная папка, которую я использую в других сценариях /etc/init.d.

Моя вторая мысль заключалась в том, что это связано с sudo: я тестировал start-stop-daemon в режиме, отличном от sudo, и запускал /etc/init.d/ar_sendmail в режиме sudo. Но я также могу запустить start-stop-daemon с помощью sudo.

Немного запутался, есть идеи?


person Max Williams    schedule 08.03.2011    source источник
comment
Проверьте строку, в которой вы перезаписываете переменную PATH, закрывая доступ к /sbin, /usr/sbin и т. д. Вы можете сделать ее PATH=$PATH:/blah/blah или явно добавить необходимые каталоги.   -  person vhallac    schedule 08.03.2011
comment
@Dysaster, это должен быть ответ ...   -  person sarnold    schedule 08.03.2011
comment
@sarnold Правда, не знаю, почему я использовал комментарий. :)   -  person vhallac    schedule 08.03.2011
comment
Пожалуйста, не кросс-пост.   -  person Dennis Williamson    schedule 08.03.2011


Ответы (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.)

person sarnold    schedule 08.03.2011

Добавьте source /etc/profile в начало скрипта, чтобы получить настройку пути.

person Erik    schedule 08.03.2011