2

/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」と言って、start-stop-daemon 行で爆発しています。しかし、値をその行に手動で挿入してコマンドラインで実行すると、機能します。

私の最初の考えはそれがシバンラインだったのですが、それは#! /bin/sh正しいはずですか?これは間違いなく適切なフォルダーであり、他の /etc/init.d スクリプトで使用するものです。

私の2番目の考えは、それがsudoに関連しているということでした.sudo以外でstart-stop-daemonをテストし、sudoモードで/etc/init.d/ar_sendmailを実行していました。しかし、sudoでもstart-stop-daemonをうまく実行できます。

ちょっと困惑しています、何かアイデアはありますか?

4

2 に答える 2

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。)

于 2011-03-08T10:37:50.420 に答える
0

スクリプトの先頭に a を追加しsource /etc/profileて、パスを設定します。

于 2011-03-08T10:23:47.467 に答える