我有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
请告诉我这种方法是否正确或解决方案是否是别的。
答案 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