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:not found”。但是,当我手动将值插入该行并在命令行上运行它时,它可以工作。 我的第一个想法是它是shebang线但是
#! /bin/sh
应该是对的不应该吗?它绝对是正确的文件夹以及我在其他/etc/init.d脚本中使用的文件夹。 我的第二个想法是它与sudo有关:我一直在非sudo中测试start-stop-daemon并在sudo模式下运行/etc/init.d/ar_sendmail。但是,我也可以使用sudo运行start-stop-daemon。 有点难过,有什么想法吗?     
已邀请:
正如@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
。)     
source /etc/profile
添加到脚本的开头,以便设置路径。     

要回复问题请先登录注册