私は何時間も次のことをしようとしました(Centos 6で)。
- cron はプロセス A を起動します。
- プロセスAは、プロセスBがまだ生きていることを確認する。
- プロセスBが存在しない場合、プロセスAはプロセスBを開始する。
問題は、プロセスAが終了した後にプロセスBも終了することです。
プロセスAとプロセスBの両方がbashスクリプトを実行します。
bin/bash script.sh &
私は使用しようとしましたが、exec bin/bash script.sh
成功しませんでした。コンソールでプロセスAを起動すると、プロセスBは終了しません。
私がやろうとしているのは理論的には可能です(例えば、cron実行プロセスでプロセスを起動し、それを維持するようにすること)。プロセスAが終了した後もプロセスBが維持されるようにプロセスBを開始する他の方法は何ですか?
答え1
scriptForA.sh内部で使用されますnohup scriptForB.sh
。これにより、親プロセスが終了したときに子プロセスが終了しなくなります。
終了すると、親プロセスはSIGTERM
すべての子プロセスにシグナルを送信します。を使用すると、nohup
子プロセスはシグナルSIGTERM
を無視します。
答え2
これはわかりませんが、ここにあります。解決策これは私にとって効果的です。
run.sh
以下を実行する新しいスクリプトを定義しました。#!/bin/bash while true do run_process_a.sh sleep 60 done
その後、いくつかの異なるスクリプトを定義しました。
service.sh
:ㅏデーモンスクリプトstart.sh
: run.sh インスタンスを起動し、その pid を保存するラッパーstop.sh
: 保存されたpidでrun.shインスタンスを停止するラッパー
init.dを使用し、chkconfigを介してservice.shを登録しました。
言及したように、これは私の質問に対する直接的な答えではありませんが、私の問題を解決するのに役立ったので、ここに文書化しました。また、これが私の意図を達成するためのよりきれいな方法かもしれません。