我想同时开始执行job1和job2(例如./job1&amp ;; ./job2& amp ;;)并在完成后立即重新执行作业。当每个作业执行至少10次时,整个任务终止。在脚本结束时,我想打印两个作业的每次执行的执行时间。我怎么能用bash来做呢?
答案 0 :(得分:1)
首先,请注意您无法在同一时间启动两个作业。一个将开始,然后另一个将开始。如果要跟踪进程的状态,则还需要在此期间运行其他命令。考虑到这一点,你可以做这样的事情:
#!/bin/bash
#Tested code works :)
tries1=0
tries2=0
minTries=10
pid1='null'
pid2='null'
while [[ $tries1 -lt $minTries || $tries2 -lt $minTries ]]
do
if [[ ! -d "/proc/${pid1}" ]]
then
time ./job1 &
pid1=$!
tries1=$((tries1+1))
echo "1 - $pid1 - $tries1"
fi
if [[ ! -d "/proc/${pid2}" ]]
then
time ./job2 &
pid2=$!
tries2=$((tries2+1))
echo "2 - $pid2 - $tries2"
fi
done
答案 1 :(得分:1)
如果您将问题重述为“从(大约)同时开始,按顺序运行10个job1
个实例,并依次运行10个job2
个实例,那么事情就不那么复杂了。
run10 () {
local i
for i in $(seq 0 9); do
"$1"
done
}
run10 ./job1 & run10 ./job2
wait
没有特别的理由将第二个run10
放在后台,因为我们希望wait
让第一个人在最后完成。
我只是假设job1
和job2
是包装器,它们以合适的方式处理时间信息。