问题标签 [gnu-parallel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - 使用 GNU 并行拆分命令行参数
使用GNU parallel
:http ://www.gnu.org/software/parallel/
我有一个带有两个参数的程序,例如
我正在使用生成文件名对的脚本,但这会带来问题,因为脚本的结果是单个字符串 - 而不是一对。像:
GNU parallel
似乎有很多技巧,我想知道是否有一个用于在分隔符周围分割文本的技巧:
简单的解决方法是在 prog 中手动拆分 args,但我想知道在GNU parallel
.
linux - “查找”和“ls”与 GNU 并行
我正在尝试使用GNU parallel
将大量文件发布到 Web 服务器。在我的目录中,我有一些文件:
我有一个看起来像这样的 shell 脚本:
脚本中还有一些其他内容,但这是最简单的示例。我尝试执行以下命令:
这是GNU parallel
页面显示为对目录中的文件进行操作的“正常”方式。这似乎将文件名传递到我的脚本中,但 curl 抱怨它无法加载传入的数据文件。但是,如果我这样做:
它工作正常。向我的脚本传递参数的方式ls
和传递方式之间有区别吗?find
还是我需要在该脚本中做一些额外的事情?
shell - 用户运行脚本时如何忽略用户的shell
我必须按用户运行脚本。该用户的外壳已更改为/script/script1
文件中/etc/passwd
。当我运行脚本时,它会将 SHELL 作为 /script/script1。
ssh - 使用 GNU 并行时如何限制新的传出 ssh 连接的速率?
背景: OpenSSH的默认设置MaxStartups
是 10:30:60,大多数 Linux 发行版都保持这个默认设置。这意味着在 sshd 开始丢弃 30% 的新传入连接之前,一次只能有 10 个 ssh 连接正在交换密钥和进行身份验证,并且在 60 个未经身份验证的连接时,所有新连接都将被丢弃。建立连接后,将不计入此限制。参见例如这个问题。
问题:我正在使用 GNU 并行在大量后端节点上运行一些繁重的数据处理。我需要通过单个前端机器访问这些节点,并且我正在使用 ssh:sProxyCommand
设置隧道以透明地访问后端。但是,我一直在达到最大未经身份验证的连接限制,因为并行生成的 ssh 连接比前端可以一次验证的要多。
我尝试过ControlMaster auto
重用与前端的单个连接,但没有运气。
问题:如何限制打开新 ssh 连接的速率?我可以控制在给定时间打开多少未经身份验证的连接,并延迟新连接直到另一个连接通过身份验证?
environment-variables - 使用 GNU Parallel 继承环境变量
我想在 GNU Parallel 中继承环境变量。我有几个“脚本”(实际上只是命令列表,设计用于 GNU Parallel),每行都有数百行,它们都调用不同的外部程序。但是,这些外部程序(我无法控制)需要在运行之前设置几个环境变量。
在本地设置/导出它们似乎没有帮助,而且我看不到任何方法可以将此信息添加到配置文件中。
文档似乎没有任何内容,类似的 SO 页面建议将命令包装在脚本中。然而,这似乎是一个不优雅的解决方案。有没有办法导出当前环境,或者在脚本中指定所需的变量?
谢谢!
shell - GNU 并行处理
我有以下要运行的脚本GNU parallel
,它是一个需要运行n
时间的 for 循环。我怎样才能做到这一点GNU parallel
?
bash - 使用 bash -c 和 Globbing
我在一个命令上运行 gnu-parallel,该命令在从 bash shell 运行时运行良好,但在使用 -c 标志使用 bash 并行执行它时返回错误。我认为这与我正在使用的特殊 globbing 表达式有关。
这成功返回。
启用标志后,命令失败
该手册仅指定 -c 调用 bash 来读取字符串的参数,我是否遗漏了什么?
编辑:我应该补充一点,我需要它从 gnu 并行字符串运行,因此最终生成的命令必须可由 /bin/bash -c "Some Command" 运行
linux - GNU 并行负载均衡
我正在尝试找到一种在集群上执行 CPU 密集型并行作业的方法。我的目标是为每个内核安排一个作业,以便每个作业在安排后都有望获得 100% 的 CPU 利用率。这是迄今为止提出的:
文件 build_sshlogin.sh
该脚本由 GNU 并行使用,如下所示:
这种技术的问题是,如果有人在集群中的服务器上启动另一个 CPU 密集型作业,而不检查 CPU 使用情况,那么脚本最终会将作业调度到正在使用的核心。此外,如果在第一个作业完成时 CPU 使用率发生了变化,那么新释放的内核将不会被 GNU 并行调度用于剩余作业。
所以我的问题如下:有没有办法让 GNU 在调度每个作业之前并行重新计算空闲内核/服务器?欢迎任何其他解决问题的建议。
注意:在我的集群中,所有核心都具有相同的频率。如果有人可以概括以解释不同的频率,那也是受欢迎的。
gnu-parallel - bash gnu 并行 argfile 语法
我刚刚发现了 GNU 并行,我在运行一个简单的并行任务时遇到了一些麻烦。我有一个在多个值上运行的模拟,我想将它拆分为使用命令行参数并行运行。从docs看来,您似乎可以parallel mycommand :::: myargfile
在其中myargfile
并行运行包含您想要提供命令的各种参数。但是,我没有看到任何关于如何列出 args 的信息,并假设myargfile
像这样可以工作:
mycommand --pmin 0 --pmax 0.1
执行没有问题。但是当我运行时,parallel mycommand :::: myargfile
我得到error: unknown option pmin 0 --pmax 0.1
(捕获并解码礼貌提升程序选项)。 parallel echo :::: myargfile
正确打印出参数。就好像它们被包装在一个程序无法读取的字符串中,并且不像它们来自标准 bash 脚本一样。
这是怎么回事?我怎样才能使这项工作?
parallel-processing - GNU 并行有两个参数
我有一个 C-shell 脚本,其中有一个名为$hosts_string
以下形式的变量:
我还有一个名为$chrs_string
以下形式的变量:
我还有一个名为的变量$inputFn
,它指定了我需要处理的文本文件。
我想做的是让每个主机运行一个doStuff
对 的每个成员调用的命令$chrs_string
,并将$inputFn
其作为输入文件名参数。
我尝试了以下方法:
如果这可行,这应该chr1
通过chrM
命令的输出创建文件doStuff
,但我什么也没得到。并行完成而没有发出错误,但没有输出。
如果我不使用命令本身就可以正常工作parallel
,所以它不是命令,而是我如何为parallel
.
为了确认这一点,我尝试了以下方法:
如果这可行,并且$inputFn
是 (例如) /foo/bar
,那么我将获得 (例如) 一个名为 的文件chr1
,其中包含以下字符串:
如何调整我的命令,parallel
以便它正确地循环遍历每个组合?$chrs_string
$inputFn