我必须在我的工作网格中进行几次模拟,但我只能一个一个地进行(否则网格会降低我的工作优先级)。所以,我需要运行一项工作,在我检查它是否完成后,发送新的。
要发送工作,我必须运行
run -file test.cfg
并检查是否完成,我必须运行:
run -status test.cfg
我收到一条消息,告诉我工作是否完成。一旦我检查了状态并完成了,我想运行一份工作。
谢谢!!
最简单的方法是:
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"
上面的意思是“运行第一个命令,&&
如果成功运行第二个命令,则 (),否则 ( ||
) 回显错误消息
也许沿着这些线的脚本会起作用:
#!/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 分钟检查一次正在运行的任务状态。如果作业失败,它会进行一些错误检查以退出。请注意,上述内容尚未经过全面测试。