【问题标题】:Replacement string not working in GNU parallel替换字符串在 GNU 并行中不起作用
【发布时间】:2016-10-29 10:34:33
【问题描述】:

我有脚本run_md.py,它从名为test.pdb 的输入文件生成文件test.dcd。 我想使用 GNU 并行对远程服务器上的多个输入文件 (test*.pdb) 执行相同的命令,并将结果传输回本地计算机。因此,我使用以下命令:

parallel --trc {.}.dcd -j 2 -S $SERVER1 './run_md.py {} 1000' ::: test*.pdb

该命令在使用 2 个插槽的服务器上按预期运行。但是,文件没有传回,我收到以下错误:

rsync: link_stat "/home/bougui/{.}.dcd" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1655) [Receiver=3.1.1]

看起来替换字符串不起作用。我怎样才能让它工作?

下面是parallel --version的输出:

GNU parallel 20130922
Copyright (C) 2007,2008,2009,2010,2011,2012,2013 Ole Tange and Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
GNU parallel comes with no warranty.

Web site: http://www.gnu.org/software/parallel

When using GNU Parallel for a publication please cite:

O. Tange (2011): GNU Parallel - The Command-Line Power Tool, 
;login: The USENIX Magazine, February 2011:42-47.

【问题讨论】:

    标签: gnu-parallel


    【解决方案1】:

    您所做的事情是 100% 正确的。因此,您系统上的某些东西正在破坏这一点。请在另一个系统上尝试此操作,如果可能,请关注来自man parallel 的报告错误。

    【讨论】:

    • 感谢您的回答。我已经在带有并行包的 Debian 8.5 和带有并行包的 Ubuntu 14.04 上尝试了该命令。 SERVER1 是 CentOS 6.8 版。我还尝试将 SERVER1 更改为 Ubuntu 14.04 机器并从 Deban 机器并行启动,我得到了同样的错误。我使用 zsh 作为外壳。我不知道发生了什么。
    • 我用 zsh 测试过,它在我的机器上也能正常工作。如果您可以按照 REPORTING BUGS 中的描述重现错误,也许我们可以找出错误。
    【解决方案2】:

    该线程中报告的错误已得到修复,此功能适用于最新版本的 GNU 并行 (20160622)。与 Debian 8.5 一起打包的 GNU 并行版本 20130922 对于 {.} 字符串替换的使用存在错误,如下所述:

    经过更多测试,我发现输出文件必须在并行运行的命令中用替换字符串指定。

    出于测试目的,您可以在下面找到其他人可以运行的完整示例:

    echo This is input_file > input_file && parallel --trc {}.out -S $SERVER1 cat {} ">"{}.out ::: input_file
    

    上面的例子效果很好。当我使用替换字符串{.} 如下:

    echo This is input_file > input_file.in && parallel --trc {.}.out -S $SERVER1 cat {} ">"{.}.out ::: input_file
    

    它也有效。但是,如果我没有在并行运行的命令中指定{.}.out,如下所示:

    echo This is input_file > input_file.in && parallel --trc {.}.out -S $SERVER1 cat {} ">"input_file.out ::: input_file
    

    ...我重现错误:

    rsync: link_stat "/home/bouvier/{.}.out" failed: No such file or   directory (2)
    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1655) [Receiver=3.1.1]
    rsync: [Receiver] write error: Broken pipe (32)
    

    因此必须在并行运行的命令中指定输出文件。

    【讨论】:

    • 请检查这是否也是最新版本的 GNU Parallel 的问题。这听起来像是一个固定的错误。
    • 是的,它适用于最新版本 (20160622)。因此,与 Debian 8.5 一起打包的 GNU 并行(版本 20130922)似乎有缺陷。
    • 为了完整起见,我在答案中添加了有关 GNU 并行版本的版本信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2015-06-24
    • 2013-07-04
    • 2019-01-08
    • 2016-02-15
    相关资源
    最近更新 更多