2012-11-08 32 views
0

我必须在我的工作网格上做几次模拟,但我只能一个接一个地做(否则网格会给我的工作优先级降低)。所以,我需要运行一个工作,并在检查完成后发送新工作。如何检查以前的完成后自动运行脚本?

要发送的工作,我必须跑

run -file test.cfg 

,并检查其是否完成,我要运行:

run -status test.cfg 

,我收到显示我如果作业是一个消息完成。一旦我检查了状态并完成,我想运行一项工作。

谢谢!

+0

这里有什么问题?为什么你不能在检查完状态后再运行这个工作?我找不到一个名为“run”的bash命令,它来自哪里? – cdarke

回答

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

最简单的方法是:

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" 

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