我确实有 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)
请问有什么想法吗?
创建该 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 是否存在。如果没有,让它退出。
您可以制作一个以有组织的方式调用其他脚本的脚本,如下所示,这是您的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
有错误的情况下,那么您可以使用变量包含错误跟踪,您可以将其值保留为0
或1
。然后,如果前一个脚本没有按预期完成,您可以对下一个脚本做什么做出必要的决定。一个例子如下,
#!/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)
在上面的脚本中,变量是跨脚本传递的。使用代码前请谨慎使用并进行测试。
归档时间: |
|
查看次数: |
15322 次 |
最近记录: |