如何在Linux机器上并行执行多个perl脚本?

我想运行目录中的所有脚本。 喜欢 ,

该目录包含40个脚本,我想运行前5个脚本parallel.after完成这些脚本后,将执行下5个脚本以及其余的。

请使用linux和perl命令来提供任何解决scheme

当你在脚本文件夹中运行这个bash脚本/命令时:

for var in $(ls *.pl) do $var & # 5 simultaneous jobs while test "$(jobs |wc -l)" -gt 4 do sleep 1 done done 

这依赖于你没有其他的后台作业运行,通过在命令行上写“作业”来测试。

每个人都喜欢重塑并行执行工具。

  • 平行
  • pexec
  • 银行经营
  • xapply

你可以使用nohup前5个脚本? 让第五个脚本写入已经完成并继续的某个文件。

不要忘了GNU Make! 像这样使用makefile并使用-j选项运行。 请参阅http://www.gnu.org/software/make/manual/make.html#Parallel

 scripts=$(wildcard *.sh) all: $(patsubst %.sh,%.out,$(scripts)) %.out: %.sh sh $< > $@ 2>&1 

如果你在Perl工作,我会建议Parallel :: ForkManager

哦,似乎Linux上的xargs有一个-P选项来并行运行作业。 我没有使用它,因为我的GNU Make技巧早于它。

 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来运行您的脚本。 例:

 # 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