gpt4 book ai didi

bash - 如何使用 bash 在一组参数上并行执行多个命令,如果其中至少一个失败则失败

转载 作者:行者123 更新时间:2023-11-29 08:50:39 28 4
gpt4 key购买 nike

我有一个 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 parallel 和 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[@]}"

最佳答案

如此接近正确的 GNU Parallel 语法:

COMMAND=echo
PARAMETERS=(first-parameter second-parameter third-parameter)
parallel -j 4 -k --retries 2 "$COMMAND" {} ::: "${PARAMETERS[@]}" ||
echo $? commands failed. More than 99 if $? = 100

或者如果你真的坚持自己重试:

PARAMETERS=(first-parameter second-parameter third-parameter)
export -f run_and_retry
parallel -j 4 -k run_and_retry {} ::: "${PARAMETERS[@]}" ||
echo One or more commands failed

关于bash - 如何使用 bash 在一组参数上并行执行多个命令,如果其中至少一个失败则失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54019602/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com