0

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

要发送工作,我必须运行

run -file test.cfg

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

run -status test.cfg

我收到一条消息,告诉我工作是否完成。一旦我检查了状态并完成了,我想运行一份工作。

谢谢!!

4

2 回答 2

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"

上面的意思是“运行第一个命令,&&如果成功运行第二个命令,则 (),否则 ( ||) 回显错误消息

于 2012-11-08T18:37:19.767 回答
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 分钟检查一次正在运行的任务状态。如果作业失败,它会进行一些错误检查以退出。请注意,上述内容尚未经过全面测试。

于 2012-11-08T11:07:45.163 回答