【发布时间】:2019-05-29 21:12:58
【问题描述】:
我有一个 bash 脚本,它的函数需要与不同的参数并行运行。 我需要知道是否至少有一个执行失败(返回非零)——不管有多少失败。
该命令接受一个参数数组来执行。 由于高负载,我需要将并发限制为 4 个并发运行。 我还需要在父进程(运行 bash 脚本的那个)中打印日志
这是我正在运行的函数:
function run_and_retry {
EXIT_STATUS=0
$COMMAND || EXIT_STATUS=$?
if [ $EXIT_STATUS -ne 0 ]; then
EXIT_STATUS=0
$COMMAND || EXIT_STATUS=$?
fi
return $EXIT_STATUS
}
我尝试过使用 GNU 并行和 xargs,但都遇到了问题。
使用 xargs:(无法从中获取退出状态,并且在 TravisCI 中运行时它也无法正常工作)
PARAMETERS=(first-parameter second-parameter third-parameter)
export -f run_and_retry
echo "${PARAMETERS[@]}" | xargs -P 4 -n 1 -I {} bash -c "run_and_retry {}"
使用 GNU 并行:
PARAMETERS=(first-parameter second-parameter third-parameter)
export -f run_and_retry
parallel -j 4 -k --lb 2 run_and_retry {} ::: echo "${PARAMETERS[@]}"
【问题讨论】:
-
-j并行选项需要一个参数,例如。parallel -j 4。什么是COMMAND,它是如何分配的? -
谢谢,已解决
-
run_and_retry函数似乎是一种非常迂回的说法$COMMAND || $COMMAND || return
标签: bash parallel-processing xargs gnu-parallel