1

我有7个特定软件的许可证。因此,我想同时启动7个工作。我可以用'&'来做到这一点。现在,'wait'命令一直等到所有这7个进程结束以产生下一个7。现在,我想写一个shell脚本,在开始第一个7之后,当一个工作完成时我想开始另一个。这是因为这7个工作中的一些可能需要很长时间,而其他一些工作则很快就会完成。我不想浪费时间等待所有人完成。有没有办法在Linux中做到这一点?你可以帮我吗?并行的linux批处理作业

谢谢。

回答

1

你可以检查有多少目前正在运行和启动更多,如果您有少于7:

while true; do 
    if [ "`ps ax -o comm | grep process-name | wc -l`" -lt 7 ]; then 
     process-name & 
    fi 
    sleep 1 
done 
+1

'ps auxw | grep process-name | WC -l'将显示8时,这里7级开始的进程 –

+0

使用'PS XA -o PID,comm' –

+0

@eicto,漂亮,谢谢! – rid

0

编写两个脚本。每完成一次重新开始一项工作,一次开始7次第一个脚本。

像:

script1: 

./script2 job1 
... 
./script2 job7 

script2: 

while(...) 
    ./jobX 
3

GNU parallel是这样的去。它用于启动同一个命令的多个实例,每个实例都具有从stdin或外部文件中检索到的不同参数。

比方说,您的许可脚本称为myScript,每个实例都具有相同的选项--arg1 --arg2,并采取了催生每个实例变量参数--argVariable,这些参数存储在文件myParameters

cat myParameters | parallel -halt 1 --jobs 7 ./myScript --arg1 --argVariable {} --arg2 

说明:

  • -halt 1告诉parallel如果一次失败则停止所有作业
  • --jobs 7将推出myScript

7个实例在基于Debian的Linux系统,你可以使用安装parallel

sudo apt-get install parallel 

作为奖励,如果您的许可证允许的话,你甚至可以告诉parallel在多台电脑中启动这7个实例。

0

我发现一个相当好的解决方案,使用,这是标准分布的一部分。见here