我必须在我的工作网格上做几次模拟,但我只能一个接一个地做(否则网格会给我的工作优先级降低)。所以,我需要运行一个工作,并在检查完成后发送新工作。如何检查以前的完成后自动运行脚本?
要发送的工作,我必须跑
run -file test.cfg
,并检查其是否完成,我要运行:
run -status test.cfg
,我收到显示我如果作业是一个消息完成。一旦我检查了状态并完成,我想运行一项工作。
谢谢!
我必须在我的工作网格上做几次模拟,但我只能一个接一个地做(否则网格会给我的工作优先级降低)。所以,我需要运行一个工作,并在检查完成后发送新工作。如何检查以前的完成后自动运行脚本?
要发送的工作,我必须跑
run -file test.cfg
,并检查其是否完成,我要运行:
run -status test.cfg
,我收到显示我如果作业是一个消息完成。一旦我检查了状态并完成,我想运行一项工作。
谢谢!
可能沿着这些路线的脚本将工作:
#!/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分钟检查一次正在运行的任务状态。如果作业失败,它会执行一些错误检查以退出。请注意,上述内容尚未经过充分测试。
最简单的方法是:
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"
以上意味着“运行第一个命令,并且(&&
)如果成功运行第二个命令,否则(||
)回显错误消息
这里有什么问题?为什么你不能在检查完状态后再运行这个工作?我找不到一个名为“run”的bash命令,它来自哪里? – cdarke