web-dev-qa-db-ja.com

RedHatデーモン関数の使用法

RHELでJettyの初期化スクリプトを作成しています。 initライブラリ(/etc/rc.d/init.d/functions)が提供するdaemon関数を使用しようとしています。

私は この簡潔なドキュメントオンラインの例 を見つけました(例として、システム上の他のinitスクリプトも調べています)。

デーモンを開始するには、オンラインからこのスニペットを見てください

daemon --user="$DAEMON_USER" --pidfile="$PIDFILE" "$DAEMON $DAEMON_ARGS &"
RETVAL=$?
pid=`ps -A | grep $NAME | cut -d" " -f2`
pid=`echo $pid | cut -d" " -f2`
if [ -n "$pid" ]; then
        echo $pid > "$PIDFILE"
fi

$PIDを調べて、手動で$PIDFILEに書き込む必要があるのはなぜですか。 daemon関数の--pidfileオプションのポイントは何なのだろうと思います。

14
quickshiftin

あなたが持っていると思う質問に答えるには、--pidfileを使用して、デーモンプロセスがすでに実行されているかどうかを確認します。 RHEL(および派生物)では、daemon関数はpidfileを書き込みません。

プログラムがフォアグラウンドに留まっている場合は、コマンドに&を追加して明示的にバックグラウンドに送信する必要があります。その後、pidをフェッチする必要があります。 daemonを使用する場合、$!は使用できません。

11
jnas