检查上一次完成后如何自动运行脚本?

时间:2012-11-08 05:16:12

标签: bash grid jobs

我必须在我的工作网格中进行几次模拟,但我只能逐个进行(否则网格会给我的工作减少优先级)。所以,我需要运行一个工作,在检查完成后,发送新工作。

要发送我必须运行的工作

run -file test.cfg

并检查是否完成,我必须运行:

run -status test.cfg

我收到一条消息,告诉我工作是否完成。我想在检查状态后运行一个工作就完成了。

谢谢!

2 个答案:

答案 0 :(得分:1)

沿这些方面的脚本可能会起作用:

#!/bin/bash

declare -a jobs=(task1.cfg task2.cfg task3.cfg);

for job in ${jobs[@]}; do
    # Start job
    run -file $job;
    # Wait for job to complete
    while [ "$(run -status $job)" != "COMPLETE" ]; do
            if [ "$(run -status $job)" == "FAILED" ]; then
                echo "Job $job failed" >&2;
                exit -1;
            fi;
            sleep 10m;
    done;
done;

在这里,我们定义要运行的任务列表并循环遍历每个任务,启动作业并等待它完成,然后再进入下一个任务。它每10分钟检查一次运行任务状态。如果作业失败,它会执行一些错误检查以退出。请注意,上述内容尚未经过全面测试。

答案 1 :(得分:1)

最简单的方法是:

run -file test.cfg ; run -status test.cfg

这将在第一个命令完成后运行第二个命令。这并不能检查是否有任何成功。

更好的方法是检查上一个命令是否返回成功的返回码(即$?=0

run -file test.cfg && run -status test.cfg

在此示例中,&&表示“仅在第一次返回时为0(即成功)时运行第二个命令

最后,如果第一个命令失败,您需要一条有意义的消息:

run -file test.cfg && run -status test.cfg || echo "first command execution failed"

以上表示“运行第一个命令,(&&)如果成功运行第二个命令,否则(||)回显错误消息