linux批处理作业并行

时间:2012-11-23 22:03:34

标签: linux parallel-processing background-process batch-processing

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

感谢。

4 个答案:

答案 0 :(得分:3)

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

假设您的许可脚本名为myScript,每个实例具有相同的选项--arg1 --arg2,并为每个生成的实例采用变量参数--argVariable,这些参数存储在文件{{ 1}}:

myParameters

解释:

  • cat myParameters | parallel -halt 1 --jobs 7 ./myScript --arg1 --argVariable {} --arg2 告诉-halt 1停止所有工作(如果失败)
  • parallel将启动--jobs 7
  • 的7个实例

在基于debian的linux系统上,您可以使用:

安装myScript
parallel

作为奖励,如果您的许可证允许,您甚至可以告诉sudo apt-get install parallel 在多台计算机中启动这7个实例。

答案 1 :(得分:1)

您可以检查当前正在运行的数量,如果您的数量少于7,则可以启动更多:

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

答案 2 :(得分:0)

编写两个脚本。一个在每次完成时重新启动一个作业,一个从第一个脚本开始7次的作业。

像:

script1:

./script2 job1
...
./script2 job7

script2:

while(...)
  ./jobX

答案 3 :(得分:0)

我使用找到了一个相当不错的解决方案,它是标准发行版的一部分。见here