我想運行目錄中的所有腳本。 贊,如何在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