Я пытаюсь запустить стартовый скрипт (для 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
Он зависает на строке start-stop-daemon, говоря "start-stop-daemon: not found". Но когда я вручную вставляю значения в эту строку и запускаю ее в командной строке, она работает.
Первая мысль была, что это строка shebang, но #! /bin/sh
ведь так и должно быть, не так ли? Это определенно нужная папка, и я использую ее в других своих скриптах /etc/init.d.
Вторая мысль была, что это связано с sudo: я тестировал start-stop-daemon без sudo и запускал /etc/init.d/ar_sendmail в режиме sudo. Но я могу нормально запустить start-stop-daemon и с sudo.
Я в некотором замешательстве. Есть идеи?
решение1
PATH=/var/lib/gems/1.8/bin
Вот в чем твоя проблема.
Вы затираете свою PATH
переменную, поэтому ее невозможно найти start-stop-daemon
в /sbin
Попробуйте использовать:
PATH=${PATH}:/var/lib/gems/1.8/bin
Или что-то похожее.