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