【问题标题】:how to get exit code when using xargs (parallel)使用 xargs 时如何获取退出代码(并行)
【发布时间】:2014-04-14 08:45:56
【问题描述】:

我制作了一个用于启动并行 rsync 进程的脚本:

#! /bin/bash
LIST=$1
DEST_DIR=$2
RSYNC_OPTS=$3
#echo "rsyncing From=$SRC_DIR To=$DEST_DIR RSYNC_OPTS=$RSYNC_OPTS"
echo $LIST|xargs -n1 -d, echo|xargs -n1 -P 0 -I% rsync --rsync-path='sudo rsync' ${RSYNC_OPTS} % ${DEST_DIR}

然后,我在获取 rsync 进程的退出状态时遇到了问题。我知道可以获取一组 pipestatus,但我需要捕获退出代码以了解 rsync 是否成功。

有人知道吗?

【问题讨论】:

  • 您已经提到$PIPESTATUS${PIPESTATUS[2]} 将包含第二个xargs 命令的退出状态。如果rsync 以 1-125 的状态退出,这将是 123(请参阅此处的退出状态部分:unixhelp.ed.ac.uk/CGI/man-cgi?xargs
  • 嗨乔希,感谢您的回复。不过,我需要 rysnc 的退出代码,而不是 xargs 退出代码。像这样的东西:wpkg.org/Rsync_exit_codes
  • 不确定您是否能够像这样使用 xargs 获得 rsync 的特定退出状态,它将被 xargs 屏蔽。也许你可以通过$LIST 来代替?

标签: linux bash rsync xargs


【解决方案1】:

xargs 的手册页显示了可能的退出状态值,但是它只能生成单个聚合退出代码,而不是它运行的每个子进程的退出代码。您可以尝试以下选项之一:

  • 让 xargs 生成的进程打印其退出代码,并让父任务解析所有退出代码输出以确定每个 rsync 的退出代码。
  • 使用 GNU parallel--joblog 选项。这将创建一个文件,其中包含所有并行运行的命令及其退出代码和其他信息。然后可以在parallel 退出后解析此文件,以确定哪些 rsync 命令失败及其各自的错误代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多