Bash

GNU 並行的並發問題

  • November 19, 2014

我的腳本無法在 GNU 並行中正確執行事物。

我有一個sub_script這樣的(所有這些實際上都是簡化版本):

#! /bin/bash   
input=$1  
# input is a date in YYYYMMDD format  
mkdir -p $input

cd $input  
filename=$input'.txt'  
echo 'line1' > $filename  
echo 'The date is: '$input >> $filename

然後我有一個文件 multi.sh 像這樣:

cd /home/me/scripts; ./sub_script 20141001   
cd /home/me/scripts; ./sub_script 20141002   
cd /home/me/scripts; ./sub_script 20141003   
cd /home/me/scripts; ./sub_script 20141004   
cd /home/me/scripts; ./sub_script 20141005    

我正在嘗試使用 GNU 並行使用此命令執行具有多核的所有這些功能

parallel -j 3 --delay 1 < multi.sh 

在 3 個核心上執行。我試圖在執行每一行之間實現 1 秒的延遲以防止出現問題,但這不起作用。

我遇到了包含不正確文件的新目錄的問題。我認為這只發生在multi.sh比指定的核心更多的行時-j,它只是偶爾發生(它並不總是可重現的)。我可以parallel連續兩次重新執行該行並獲得不同的結果。有時我可能會20141002.txt20141005目錄中獲取文件而不是20141005.txt文件。其他時候我可能只得到20141002.txt目錄中的201005文件。

關於如何解決這個問題有什麼建議嗎?首選 GNU 並行,但我也可以嘗試其他命令。

如果您使用並行,為什麼需要額外的批處理文件?

parallel -j3 --delay 1 ./sub_script ::: 20141001 20141002 20141003 20141004 20141005

引用自:https://unix.stackexchange.com/questions/168757