转换 unix 脚本以使用 gnu parallel
Convert unix script to use gnu parallel
我有以下代码,它按预期工作。它确保始终产生 2 个进程,如果任何进程失败,脚本就会停止。
我之前曾在简单的一行脚本上使用 GNU parallel,它们确实有效well.I我确信下面的脚本也可以变得更简单。
现实中的睡眠者功能比下面显示的要复杂得多。
objective是GNU parallel会并行调用sleeper函数,也会做错误处理
`sleeper(){
stat=
sleep 5
echo "Status is "
return
}
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`
谢谢
您要找的是--halt
(要求版本20150622):
sleeper(){
stat=
sleep 5
echo "Status is "
return
}
export -f sleeper
parallel -j2 --halt now,fail=1 -v sleeper ::: 0 0 0 1 0 1 0
如果您不希望睡眠者被杀死(也许您希望它完成以便清理),请使用 --halt soon,fail=1
让 运行 作业完成而不启动新作业。
我有以下代码,它按预期工作。它确保始终产生 2 个进程,如果任何进程失败,脚本就会停止。 我之前曾在简单的一行脚本上使用 GNU parallel,它们确实有效well.I我确信下面的脚本也可以变得更简单。
现实中的睡眠者功能比下面显示的要复杂得多。
objective是GNU parallel会并行调用sleeper函数,也会做错误处理
`sleeper(){
stat=
sleep 5
echo "Status is "
return
}
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`
谢谢
您要找的是--halt
(要求版本20150622):
sleeper(){
stat=
sleep 5
echo "Status is "
return
}
export -f sleeper
parallel -j2 --halt now,fail=1 -v sleeper ::: 0 0 0 1 0 1 0
如果您不希望睡眠者被杀死(也许您希望它完成以便清理),请使用 --halt soon,fail=1
让 运行 作业完成而不启动新作业。