我必须在我的工作网格中进行几次模拟,但我只能逐个进行(否则网格会给我的工作减少优先级)。所以,我需要运行一个工作,在检查完成后,发送新工作。
要发送我必须运行的工作
run -file test.cfg
并检查是否完成,我必须运行:
run -status test.cfg
我收到一条消息,告诉我工作是否完成。我想在检查状态后运行一个工作就完成了。
谢谢!
答案 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"
以上表示“运行第一个命令,(&&
)如果成功运行第二个命令,否则(||
)回显错误消息