【问题标题】:start-stop-daemon works at command line but doesn't work in /etc/init.d scriptstart-stop-daemon 在命令行中工作,但在 /etc/init.d 脚本中不起作用
【发布时间】:2011-07-11 00:04:51
【问题描述】:

我正在尝试在 /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: not found”。但是,当我手动将值插入该行并在命令行上运行它时,它可以工作。

我的第一个想法是它是 shebang 线,但 #! /bin/sh 应该是对的,不是吗?这绝对是正确的文件夹,也是我在其他 /etc/init.d 脚本中使用的文件夹。

我的第二个想法是它与 sudo 相关:我一直在非 sudo 中测试 start-stop-daemon 并在 sudo 模式下运行 /etc/init.d/ar_sendmail。但是,我也可以使用 sudo 运行 start-stop-daemon。

有点难过,有什么想法吗?

【问题讨论】:

  • 检查要覆盖 PATH 变量的行,停止对 /sbin、/usr/sbin 等的访问。您可能希望将其设为 PATH=$PATH:/blah/blah,或添加明确的必要目录。
  • @Dysaster,这应该是一个答案......
  • @sarnold 是的,不知道我为什么使用评论。 :)
  • 请不要cross-post

标签: bash rubygems init.d start-stop-daemon


【解决方案1】:

正如@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。)

【讨论】:

    【解决方案2】:

    source /etc/profile 添加到脚本的开头,这样您就可以设置路径。

    【讨论】:

      猜你喜欢
      • 2013-07-24
      • 2011-09-21
      • 1970-01-01
      • 2014-09-14
      • 2022-01-22
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多