有没有办法调试 GNU Parallel?

Posted

技术标签:

【中文标题】有没有办法调试 GNU Parallel?【英文标题】:Is there a way to debug GNU Parallel? 【发布时间】:2019-03-08 19:44:26 【问题描述】:

我有一个正在尝试运行的示例脚本:

#!/bin/zsh

echo "i,rt,fifo,depth,rate,burst" > sweep_srcq.csv

parallel --bar --gnu -j4 --header : \
    '
    sem --id 0 echo i,rt,fifo,depth,rate,burst >> sweep_srcq.csv | cat'\
    ::: i 5 \
    ::: rt 0 1 \
    ::: fifo 1 \
    ::: rate 5 6 8 A D 14 21 32 64 \
    ::: depth 128 \
    ::: burst 1 \

当我在我的一台机器上运行这个脚本时,它完美执行,我看到了结果文件:

i,rt,fifo,depth,rate,burst
5,0,1,128,8,1
5,0,1,128,5,1
5,0,1,128,A,1
5,0,1,128,6,1
5,0,1,128,D,1
5,0,1,128,14,1
5,0,1,128,21,1
5,0,1,128,32,1
5,0,1,128,64,1
5,1,1,128,5,1
5,1,1,128,6,1
5,1,1,128,8,1
5,1,1,128,A,1
5,1,1,128,D,1
5,1,1,128,14,1
5,1,1,128,21,1
5,1,1,128,32,1
5,1,1,128,64,1

但是在我的另一台机器上,这段代码并没有执行..

我的计时器停留在0s,它基本上一直停留在那里,直到我杀死它。有什么方法可以调试,我的机器可能出了什么问题?

【问题讨论】:

【参考方案1】:

如果它是你的完整脚本,你可以这样做,它更短更快:

echo "i,rt,fifo,depth,rate,burst" > sweep_srcq.csv

parallel --bar -j4 --header : echo i,rt,fifo,depth,rate,burst \
  ::: i 5 \
  ::: rt 0 1 \
  ::: fifo 1 \
  ::: rate 5 6 8 A D 14 21 32 64 \
  ::: depth 128 \
  ::: burst 1 \
  >> sweep_srcq.csv

但我觉得这不是您的完整脚本,您从parallel 调用sem 是有原因的。

让我印象深刻的第一件事是你重定向标准输出两次:

sem [...] >> sweep_srcq.csv | cat

您希望将标准输出附加到 .csv 吗?或者你希望它发送到cat?如果你想要两者,你应该改用tee -a

您的问题可能只是服务器对这一行的解释不同,并且停滞的服务器运行一个从您的键盘读取的cat

【讨论】:

以上是关于有没有办法调试 GNU Parallel?的主要内容,如果未能解决你的问题,请参考以下文章

GNU Parallel面向静默退出和无效选项错误

sh GNU Parallel + cUrl

GNU Parallel 面临静默退出和无效选项错误

GNU Parallel 与多个文件的 shellcheck

gnu parallel --pipe 产生空输出文件

GNU Parallel:如何从gnu并行管道接收stdin,就像它来自文件一样?