cron 依次运行一个脚本

cron 依次运行一个脚本

我确实有 3 个脚本 (A、B、C),我希望只有第一个脚本完成后,它们才会一个接一个地运行。目前,如果 A.sh 完成后,它会转到 B.sh,但如果 B.sh 失败,则它不会执行 C.sh,请问有什么办法可以解决这个问题?我正在通过 cron 运行它们,如下所示:

30 6,14 * * 1-5/home/user/scripts/A.sh ; /home/user/scripts/B.sh ; /home/user/scripts/C.sh ; 

请问有什么想法吗?

答案1

创建该 cron 作业的更优雅的方法是:

30 6,14 * * 1-5 /home/user/scripts/A.sh && /home/user/scripts/B.sh && /home/user/scripts/C.sh

这将导致三个作业连续运行。$HOME/scripts/A.sh如果您已相应地设置变量,则可以这样做。

对于基本作业控制,例如确保仅当脚本 1 成功时脚本 2 才运行,您可以为 exit=0 添加一行以写入临时文件(如 /tmp/script-1_success)。

然后在 script-2 的开头,让它检查 /tmp/script-1_success 是否存在。如果不存在,则退出。

答案2

您可以创建一个以有组织的方式调用其他脚本的脚本,如下所示,这是您的cron文件,

30 6,14 * * 1-5/home/user/scripts/ABC.sh

然后脚本A-B-C.sh定义为,

#!/bin/bash
# Run script A,B,C

# execute script A
./home/user/scripts/A.sh

#execute script B
./home/user/scripts/B.sh

enter code here
#execute script C
./home/user/scripts/C.sh

如果你想要\不想运行脚本B.shC.sh如果脚本A.sh出现错误,则可以使用变量进行错误跟踪,变量的值可以保留为01。如果前一个脚本没有按预期完成,则可以对下一个脚本进行必要的决定。以下是一个例子,

#!/bin/bash
# Run script A,B,C

# Exit code and default run code initialization
exit_A=0
exit_B=0

def_B=1
def_C=1
#----------------------------------------------


# execute script A
. ./home/user/scripts/A.sh $exit_A #make sure to change the value of exit_A to 1 if A finishes as expected.

if [$exit_A==1] && [def_B==1] #only if A finishes without error and B is ok
then
#execute script B
. ./home/user/scripts/B.sh $exit_B
else
<do something like log>
fi

if [$exit_B==1] && [def_C==1] #only if B finishes without error and C is ok
then
#execute script C
. ./home/user/scripts/C.sh $exit_C
else
<do something like log>
fi

now="$(date +'%d/%m/%Y-%T')"
#make a log in a file (print can be used for better formatting)
echo -e $now,$exit_A,$exit_B,$exit_C >>  /home/user/log/script_log.txt 

在上面的脚本中,变量正在跨脚本传递。请谨慎使用并在使用代码前进行测试。

相关内容