转换 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 让 运行 作业完成而不启动新作业。