shell脚本中的多个顺序作业将以条件方式克隆

shell脚本中的多个顺序作业将以条件方式克隆,shell,cron,Shell,Cron,我有31个shell脚本,名为runner1.sh..runner31.sh。我需要创建一个cron作业,并将所有这些.sh脚本按顺序运行,条件是如果它们尚未运行,则必须运行;同时,如果runnerX失败,则应停止运行,而不是开始运行runnerX+1 我已经编写了一个用于聚合这些任务的shell脚本,如下所示,但我不确定这是否是正确的解决方案: ps -ef |grep -i grep | grep runner1.sh && echo "not to start" &

我有31个shell脚本,名为runner1.sh..runner31.sh。我需要创建一个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

请告诉我此方法是否正确,或者解决方案是否正确。

因此,您需要按顺序调用一系列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}')

或用于检测runner1.sh pid的各种机制中的任何一种

组合在一起,您可以用一个:

if [ -z "$pid" ]; then
  # do for here
  :
fi
if [ -z "$pid" ]; then
  # do for here
  :
fi