转换unix脚本以使用gnu parallel

时间:2016-02-17 19:53:49

标签: gnu-parallel

我有以下代码,它按预期工作。它确保始终生成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`

由于

1 个答案:

答案 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让正在运行的作业完成而不需要开始新的作业。