![GNU 并行的并发问题](https://linux22.com/image/59827/GNU%20%E5%B9%B6%E8%A1%8C%E7%9A%84%E5%B9%B6%E5%8F%91%E9%97%AE%E9%A2%98.png)
我的脚本在 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