cronジョブでデーモンプロセスを開始する

cronジョブでデーモンプロセスを開始する

私は何時間も次のことをしようとしました(Centos 6で)。

  1. cron はプロセス A を起動します。
  2. プロセスAは、プロセスBがまだ生きていることを確認する。
  3. プロセス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

これはわかりませんが、ここにあります。解決策これは私にとって効果的です。

  1. run.sh以下を実行する新しいスクリプトを定義しました。

    #!/bin/bash
    
    while true
    do
       run_process_a.sh
       sleep 60
    done
    
  2. その後、いくつかの異なるスクリプトを定義しました。

    • service.sh:ㅏデーモンスクリプト
    • start.sh: run.sh インスタンスを起動し、その pid を保存するラッパー
    • stop.sh: 保存されたpidでrun.shインスタンスを停止するラッパー
  3. init.dを使用し、chkconfigを介してservice.shを登録しました。

言及したように、これは私の質問に対する直接的な答えではありませんが、私の問題を解決するのに役立ったので、ここに文書化しました。また、これが私の意図を達成するためのよりきれいな方法かもしれません。

関連情報