Bash
GNU 並行的並發問題
我的腳本無法在 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.txt
在20141005
目錄中獲取文件而不是20141005.txt
文件。其他時候我可能只得到20141002.txt
目錄中的201005
文件。關於如何解決這個問題有什麼建議嗎?首選 GNU 並行,但我也可以嘗試其他命令。
如果您使用並行,為什麼需要額外的批處理文件?
parallel -j3 --delay 1 ./sub_script ::: 20141001 20141002 20141003 20141004 20141005