無限ループでプロセスの start-stop-daemon ブロック

無限ループでプロセスの start-stop-daemon ブロック

サービスの開始/停止/再起動の方法で呼び出されるように、bash スクリプトからサービスを設計するタスクがあります。

サービスになるスクリプトは、1 分ごとに起動してチェックを行う無限 while ループです。私はこれを次のように呼び出します。

start() {
echo -n $"Starting $DESC:"
DAEMON_ARGS=$(xmlstarlet sel -T -t -m "/config/input/sensor/device/resource" -v "concat(../../@type, ' ', ../../@dev, ' ', @res)" -n $CONFIGURATION_FILE | extract_devices)        # get device names out of XML file
echo "daemon args $DAEMON_ARGS"
start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
echo}

pid と daemon は次のように定義されます:

PIDFILE="/var/run/detection.pid"
NAME="jblub_control_loop.sh"
DAEMON="/root/test_det/${NAME}"

走るとき

./detection start (init.d にコピーして、service detection start で実行することも試みました)

init スクリプトはループから抜け出せず、start-stop-daemon 関数内でブロックされたままになります。jblub_control_loop.sh 内の無限 while ループをコメント アウトすると、ループは通過しますが、pid ファイルは作成されません。

私の質問は、無限ループのあるスクリプトをサービスとして適切に起動する方法と、pid ファイルが作成されない理由です。

答え1

まず、

--background スイッチを使用してフォークします。-m スイッチを使用して PID ファイルを作成します。

start-stop-daemon --start --background -m --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS

完全な答えについては、https://stackoverflow.com/questions/16139940/what-is-start-stop-daemon-in-linux-scripting

楽しむ

関連情報