cron 一个接一个地运行一个脚本

joh*_*ohn 4 bash scripts 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 ; 
Run Code Online (Sandbox Code Playgroud)

请问有什么想法吗?

jon*_*610 6

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

30 6,14 * * 1-5 /home/user/scripts/A.sh && /home/user/scripts/B.sh && /home/user/scripts/C.sh
Run Code Online (Sandbox Code Playgroud)

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

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

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


ank*_*540 5

您可以制作一个以有组织的方式调用其他脚本的脚本,如下所示,这是您的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
Run Code Online (Sandbox Code Playgroud)

如果您想 \ 不想运行脚本B.sh并且C.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 
Run Code Online (Sandbox Code Playgroud)

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