GNU 并行的并发问题

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 并行是首选,但我也可以尝试其他命令。

答案1

如果使用并行,为什么需要额外的批处理文件?

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

相关内容