shell脚本中的多个顺序作业将以条件方式进行cronned

时间:2012-04-23 14:01:51

标签: shell cron

我有31个名为runner1.sh..runner31.sh的shell脚本。我需要创建一个cron作业并将所有这些.sh脚本运行顺序,如果它们尚未运行它们必须运行,同时如果runnerX失败它应该停止并且不开始运行runnerX + 1。

我已经编写了一个shell脚本来汇总这些任务,如下所示,但我不确定这是否是正确的解决方案:

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

请告诉我这种方法是否正确或解决方案是否是别的。

1 个答案:

答案 0 :(得分: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