我有7个特定软件的许可证。因此,我想同时启动7个工作。我可以用'&'来做到这一点。现在,'wait'命令一直等到所有这7个进程结束以产生下一个7。现在,我想写一个shell脚本,在开始第一个7之后,当一个工作完成时我想开始另一个。这是因为这7个工作中的一些可能需要很长时间,而其他一些工作则很快就会完成。我不想浪费时间等待所有人完成。有没有办法在Linux中做到这一点?你可以帮我吗?并行的linux批处理作业
谢谢。
我有7个特定软件的许可证。因此,我想同时启动7个工作。我可以用'&'来做到这一点。现在,'wait'命令一直等到所有这7个进程结束以产生下一个7。现在,我想写一个shell脚本,在开始第一个7之后,当一个工作完成时我想开始另一个。这是因为这7个工作中的一些可能需要很长时间,而其他一些工作则很快就会完成。我不想浪费时间等待所有人完成。有没有办法在Linux中做到这一点?你可以帮我吗?并行的linux批处理作业
谢谢。
你可以检查有多少目前正在运行和启动更多,如果您有少于7:
while true; do
if [ "`ps ax -o comm | grep process-name | wc -l`" -lt 7 ]; then
process-name &
fi
sleep 1
done
编写两个脚本。每完成一次重新开始一项工作,一次开始7次第一个脚本。
像:
script1:
./script2 job1
...
./script2 job7
和
script2:
while(...)
./jobX
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个实例。
'ps auxw | grep process-name | WC -l'将显示8时,这里7级开始的进程 –
使用'PS XA -o PID,comm' –
@eicto,漂亮,谢谢! – rid