我正在尝试在 /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:未找到”。但是,当我手动将值插入该行并在命令行上运行它时,它就可以正常工作。
我首先想到的是它是 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
这就是你的问题。
你破坏了PATH
变量,所以它无法start-stop-daemon
在 /sbin 中找到
尝试使用:
PATH=${PATH}:/var/lib/gems/1.8/bin
或者类似的东西。