我想运行目录中的所有脚本。 赞,如何在linux机器上并行执行多个perl脚本?
该目录包含40个脚本,我想运行前5个脚本parallel.after完成这些脚本后,将执行下5个脚本以及其余的脚本。
请给使用Linux和Perl的命令
我想运行目录中的所有脚本。 赞,如何在linux机器上并行执行多个perl脚本?
该目录包含40个脚本,我想运行前5个脚本parallel.after完成这些脚本后,将执行下5个脚本以及其余的脚本。
请给使用Linux和Perl的命令
当你用脚本的文件夹中运行这个bash脚本/命令:
for var in $(ls *.pl)
do
$var &
# 5 simultaneous jobs
while test "$(jobs |wc -l)" -gt 4
do
sleep 1
done
done
这依赖于你没有其它后台任务运行,通过写“工作”在命令行上进行测试。
你可以使用nohup前5个脚本的任何解决方案?让第五个脚本写入已完成并继续的某个文件。
You can write sth like below. It's pseudo code.
#!/bin/ksh
dir=$1
count=0
for script in $1/*
do
count++
$i &
add the pid to pidList array
if(count==5){
while(waitforProcessComplete(pidList){
}
}
done
不要忘了GNU之作!使用这样的makefile并使用-j选项运行。见http://www.gnu.org/software/make/manual/make.html#Parallel
scripts=$(wildcard *.sh)
all: $(patsubst %.sh,%.out,$(scripts))
%.out: %.sh
sh $< > [email protected] 2>&1
如果你在Perl中工作,我会建议Parallel::ForkManager
哦,它似乎是在Linux上xargs的具有-P选项并行运行作业。我没有使用它,因为我的GNU Make技巧早于它。
我宁愿GNU并行。这很容易和有趣 - 而且documentation带有许多简洁的例子。
最大的优点是:您不必编写任何代码或Makefile来运行脚本。示例:
# create the example scripts:
mkdir scripts
for i in {1..50}; do {echo '#!/bin/sh'; echo "echo $i"; echo "sleep 1" } > scripts/s$i.sh; done
# use parallel to run all these scripts, 5 at a time:
parallel -j 5 ::: scripts/*.sh
我后来得知您可以使用xargs来运行多个并行作业。使用4个进程同时gzip文件: 'ls * .pl | xargs -n1 -P4 gzip' – Pylinux