無限ループを持つプロセスの開始 - 停止 - デーモンブロック

無限ループを持つプロセスの開始 - 停止 - デーモンブロック

私の使命は、bashスクリプトでサービスの開始/停止/再起動の方法で呼び出されるサービスを設計することです。

サービスになるスクリプトは、毎分目覚め、いくつかのチェックを実行する無限の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とデーモンは次のように定義されます。

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

私が走るとき

./スタート検出(init.dにコピーし、起動検出サービスを使用して実行してみました)

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

楽しむ

おすすめ記事