/etc/init.dで動作するスタータースクリプト(ar_sendmailというルビーの宝石用)を取得しようとしています。/ar_sendmail:start-stop-daemonはコマンドラインで動作しますが、/etc/init.dスクリプトでは機能しません。
#! /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
それは「:見つからないスタート・ストップ・デーモン」と言って、スタート・ストップ・デーモンラインで吹いています。しかし、私は手動でその行に値をプラグインし、コマンドラインで実行すると、それは動作します。
私が最初に考えたのはシバンラインでしたが、#! /bin/sh
は正しいはずですか?それは間違いなく正しいフォルダで、私が他の/etc/init.dスクリプトで使っているものです。
私の2度目の考えは、sudo関連です。私はsudo以外でstart-stop-daemonをテストし、sudoモードで/etc/init.d/ar_sendmailを実行していました。しかし、私はsudoでstart-stop-daemonを実行することもできます。
どのようなアイデアですか?
PATH変数を上書きして、/ sbin、/ usr/sbinなどへのアクセスを停止している行を確認してください。PATH = $ PATH:/ blah/blah、または必要なディレクトリを明示的に追加してください。 – vhallac
@Dysaster、それは答えになるはずです... – sarnold
@sarnold真実、なぜ私がコメントを使用したのかわかりません。 :) – vhallac