0

runner1.sh..runner31.sh という名前の 31 個のシェル スクリプトがあります。cron ジョブを作成し、これらの .sh スクリプトをすべて、まだ実行されていない場合は実行する必要があるという条件で順次実行する必要があります。一方、runnerX が失敗した場合は停止し、runnerX+1 の実行を開始しないでください。

これらのタスクを集約するためのシェル スクリプトを次のように作成しましたが、これが正しい解決策であるかどうかはわかりません。

ps -ef |grep -i grep | grep runner1.sh && echo "not to start" && sh runner1.sh && sh runner2.sh && sh runner3.sh && sh runner4.sh && sh runner5.sh && sh runner6.sh && sh runner7.sh && sh runner8.sh && sh runner9.sh && sh runner10.sh && sh runner11.sh && sh runner12.sh && sh runner13.sh && sh runner14.sh && sh runner15.sh && sh runner16.sh && sh runner17.sh && sh runner18.sh && sh runner19.sh && sh runner20.sh && sh runner21.sh && sh runner22.sh && sh runner23.sh && sh runner24.sh && sh runner25.sh && sh runner26.sh && sh runner27.sh && sh runner28.sh && sh runner29.sh && sh runner30.sh && sh runner31.sh

この方法が正しいのか、解決策が別のものなのか教えてください。

4

1 に答える 1

1

したがって、順次呼び出す必要のある一連のrunnerX.shスクリプトがあります。

for i in $(seq 1 31); do
   sh runner$i.sh || break
done

これは、それらを順番に実行することをカバーし、前のものの次のものを実行しないことは失敗します。

基本的なrunner1.shが実行されていないことを確認するには、次のようにします。

pid=$(ps -fe | grep '[r]unner1.sh' | awk '{print $2}')

また

pid=$(pgrep runner1.sh)

またはrunner1.shのpidを検出するためのさまざまなメカニズムのいずれか

for組み合わせると、ループを次のように囲みます。

if [ -z "$pid" ]; then
  # do for here
  :
fi
于 2012-04-23T14:13:05.650 に答える