我有以下代码,它按预期工作。它确保始终生成2个进程,如果任何进程失败,脚本将停止运行。 我之前在简单的一行脚本上使用过GNU parallel并且它们运行得非常好。我确信下面的那个也可以变得更简单。
现实中的卧铺功能比下面显示的要复杂得多。
目标是GNU parallel将并行调用sleeper函数并进行错误处理
`sleeper(){
stat=$1
sleep 5
echo "Status is $1"
return $1
}
PROCS=2
errfile="errorfile"
rm "$errfile"
while read LINE && [ ! -f "$errfile" ]
do
while [ ! -f "$errfile" ]
do
NUM=$(jobs | wc -l)
if [ $NUM -lt $PROCS ]; then
(sleeper $LINE || echo "bad exit status" > "$errfile") &
break
else
sleep 2
fi
done
done<sleep_file
wait`
由于
答案 0 :(得分:0)
您要找的是--halt
(需要版本20150622):
sleeper(){
stat=$1
sleep 5
echo "Status is $1"
return $1
}
export -f sleeper
parallel -j2 --halt now,fail=1 -v sleeper ::: 0 0 0 1 0 1 0
如果你不希望睡眠者被杀死(也许你希望它完成以便清理),那么使用--halt soon,fail=1
让正在运行的作业完成而不需要开始新的作业。