- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在bash脚本中的26台服务器上运行多个mongodump。
我可以运行3条命令,例如mongodump -h staging .... &
mongodump -h production .... &
mongodump -h web ... &
同时,当一个完成时,我想启动另一个mongodump。
我无法同时运行所有26条mongodumps命令,服务器将在CPU上用尽。同时最多3个mongodumps。
最佳答案
您可以使用xarg
的-P
选项并行运行指定数目的调用:
请注意,-P
选项为not mandated by POSIX,但GNU xargs
和BSD / macOS xargs
均支持该选项。
xargs -P 3 -n 1 mongodump -h <<<'staging production web more stuff and so on'
mongodump -h staging
,
mongodump -h production
和
mongodump -h web
,等待所有3个调用完成,然后继续执行
mongodump -h more
,
mongodump -h stuff
和
mongodump -h and
,依此类推。
-n 1
从输入流中获取单个参数并调用
mongodump
;根据需要进行调整,必要时在输入中使用单引号或双引号。
xargs
-但不支持BSD
xargs
-支持
-P 0
,其中
0
表示:“同时运行尽可能多的进程”。
-I {}
进行指示,并将
{}
定义为每个输入行的占位符。
xargs -P 3 -I {} mongodump -h {} after <<<$'staging\nproduction\nweb\nmore\nstuff'
{}
代替,从而允许使用
after
参数。
xargs
允许您将
-n
与
-J {}
组合在一起,而无需提供基于行的输入,但是GNU
xargs
不支持
-J
。
xargs
不会并行化命令并行输出的stdout输出,因此并行进程的输出可以交错访问。
parallel
可以避免此问题-参见下文。
parallel
xargs
具有成为标准实用程序的优势,因此在支持
-P
的平台上没有先决条件。
parallel
包中的
moreutils
(二进制)-请参见
its home page。
parallel
包中的-更强大的-GNU
parallel
(Perl脚本),谢谢,
twalberg。 -参见
its home page。
parallel
实用程序,则
parallel --version
会告诉您它是哪个实用程序(GNU
parallel
报告版本号和版权信息,“ moreutils”
parallel
抱怨无效的选项并显示语法摘要) 。
parallel
:
parallel -j 3 -n 1 mongodump -h -- staging production web more stuff and so on
# Using -i to control placement of the argument, via {}
# Only *1* argument at at time supported in that case.
parallel -j 3 -i mongodump -h {} after -- staging production web more stuff and so on
xargs
不同,此
parallel
实现不采用从stdin传递的参数。所有传递参数必须在
--
之后在命令行上传递。
parallel
实现提供的唯一功能超出了
xargs
的功能:
-l
选项允许延迟进一步的调用,直到系统负载超出指定的阈值以下为止。
man
页):“ stdout和stderr是通过相应的内部管道进行序列化的,以防止烦人的并发输出行为。”尽管我发现
man
版本中的情况并非如此>页的日期为2009-07-2-请参阅最后一节。
parallel
:
parallel -P 3 -n 1 mongodump -h <<<$'staging\nproduction\nweb\nmore\nstuff\nand\nso\non'
# Alternative, using ::: followed by the target-command arguments.
parallel -P 3 -n 1 mongodump -h ::: staging production web more stuff and so on
# Using -n 1 and {} to control placement of the argument.
# Note that using -N rather than -n would allow per-argument placement control
# with {1}, {2}, ...
parallel -P 3 -n 1 mongodump -h {} after <<<$'staging\nproduction\nweb\nmore\nstuff\nand'
xargs
一样,传递参数通过stdin提供,但是GNU
parallel
还支持在可配置的分隔符(默认为
:::
)之后将其放在命令行中。
xargs
不同,每个输入行都被视为单个参数。
-q
将它们作为不同的参数传递;否则,请参见表11。例如,
parallel -q sh -c 'echo hi, $0' ::: there
仅与
-q
一起使用。
xargs
一样,您可以使用
-P 0
一次运行尽可能多的调用,从而充分利用机器的功能,这意味着根据Ole的说法,“直到GNU Parallel达到极限(文件句柄和进程) ”。
-P
不仅像其他实用程序那样一次运行一个进程,而且每个CPU内核运行一个进程。
--line-buffer
(在最新版本中为
--lb
)选择退出此行为或
-u
(
--ungroup
)甚至允许一条输出线混合来自不同进程的输出;有关详细信息,请参见手册。
parallel
被设计为更好的
xargs
的继任者,它提供了更多的功能:一个显着的例子是
perform sophisticated transformations on the pass-through arguments的功能,可以选择基于Perl正则表达式。另请参见:
man parallel
和
man parallel_tutorial
。
xargs
和两个
parallel
实现如何处理并行运行的命令的交错输出-是否在到达时显示输出,或尝试对其进行序列化:
parallel
提供任何序列化(尽管日期为2009-07-2的“ moreutils”
parallel
手册页说了什么[1]
./tst
:
#!/usr/bin/env bash
printf "$$: [1/2] entering with arg(s): $*"
sleep $(( $RANDOM / 16384 ))
printf " $$: [2/2] finished entering\n"
echo " $$: stderr line" >&2
echo "$$: stdout line"
sleep $(( $RANDOM / 8192 ))
echo " $$: exiting"
xargs
(GNU和BSD / macOS实施,在Ubuntu 16.04和macOS 10.12上均可找到):
$ xargs -P 3 -n 1 ./tst <<<'one two three'
2593: [1/2] entering with arg(s): one2594: [1/2] entering with arg(s): two 2593: [2/2] finished entering
2593: stderr line
2593: stdout line
2596: [1/2] entering with arg(s): three 2593: exiting
2594: [2/2] finished entering
2594: stderr line
2594: stdout line
2596: [2/2] finished entering
2596: stderr line
2596: stdout line
2594: exiting
2596: exiting
parallel
(其
man
页面日期为2009-07-02的版本)
$ parallel -j 3 ./tst -- one two three
3940: [1/2] entering with arg(s): one3941: [1/2] entering with arg(s): two3942: [1/2] entering with arg(s): three 3941: [2/2] finished entering
3941: stderr line
3941: stdout line
3942: [2/2] finished entering
3942: stderr line
3942: stdout line
3940: [2/2] finished entering
3940: stderr line
3940: stdout line
3941: exiting
3942: exiting
parallel
(版本20170122)
--line-buffer
(在新版本中为
--lb
)来选择行级序列化,或者使用
-u
退出任何类型的序列化
--ungroup
)。
$ parallel -P 3 ./tst ::: one two three
2544: [1/2] entering with arg(s): one 2544: [2/2] finished entering
2544: stdout line
2544: exiting
2544: stderr line
2549: [1/2] entering with arg(s): three 2549: [2/2] finished entering
2549: stdout line
2549: exiting
2549: stderr line
2546: [1/2] entering with arg(s): two 2546: [2/2] finished entering
2546: stdout line
2546: exiting
2546: stderr line
关于bash - 并行运行一定数量的命令-对比xargs -P,GNU并行和“moreutils”并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42651475/
我有几个带有视频和图像的 Bootstrap slider 。在 slider 之外,我想要一个可以转到包含视频的幻灯片的按钮。包含视频的幻灯片的数量因 slider 而异。我想做的是获取幻灯片的数量
我在编写一个查询时遇到了一些问题。 我有一个由文件及其大小(以字节为单位)组成的表。它看起来像这样: FileUrl | FileSize ------------------ xyz.docx |
我有一个带 iframe 的网站和一个带另一个 iframe 的网站,所以它是一个 iframe 内嵌另一个 iframe(都在不同的域上)。那么有没有办法从父div或父主div的url(parent
以下表达式在 JavaScript 中给出了特殊的结果。 typeof (5 + "7") // Gives string typeof (5 - "7") // Gives number 如
我有一个名为“交易”的表,每当有人在我的网站上进行购买时,我都会在其中输入用户 ID、购买类型和金额。 我想向每个用户显示过去 7 天的这些统计信息。 目前,我有这个: $data = array()
我一整天都在努力寻找解决这一挑战的办法。 我有一张 table : id | amount | type | date |
我正在尝试在 10 个数据节点的集群中测试 Map reduce 程序的性能。在此过程中,我使用了 5 个 Reducers,然后是 10 个等等。 我在想增加 reducer 的数量也会使工作完成得
我正在使用 html5 输入 type="number"。我想监视此输入的变化,但是: 因为在支持它的浏览器中 它有旋转控件 我不能只监视 .keyup, 因为我不想等待它失去焦点,所以我不能只监视
我的购物车表格有问题。我创建了一个如下所示的表格: SQL Fiddle 我的问题是我希望能够选择产品 ID,并计算该产品 ID 在表格中重复的次数,以便我可以显示用户在购物车中拥有的商品数量。 寻找
我使用许多包含来显示我网站的一小部分。使用许多 include 是否合适,或者我应该减少它们(尽可能多)。包含函数要多花多少时间? 我的主页加载速度很慢。有什么方法可以让它加载更快。 (我的主页每天在
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: length of array in function argument 我的数组大小是5。例如: arrC
是否有标准的 Python 方法来处理 Python 中的物理单位/数量?我看到了来自不同领域(如物理学或神经科学)的不同模块特定解决方案。但我更愿意使用标准方法而不是“孤岛”解决方案,因为其他人应该
基本上就像标题所说的那样,有没有办法从 JavaScript 程序中查看事件循环中当前存在多少个 promise ?最好在 Deno 上。 最佳答案 Deno v1.26 添加了一个内部 API,可用
我只是想知道大型项目-比如说航空公司的预订系统,它可能有多少类/对象。 对象:客户,飞机,机场,路线,机票,订单。这就是我能想到的。该项目可能是成千上万的代码行,那么是否可能会有更多的类(执行与对象无
如果有办法限制Scala中未处理的 future 数量,我将无法提供资金。 例如下面的代码: import ExecutionContext.Implicits.global for (i
从昨天开始,我一直在努力做到这一点,尽管还没有运气。我找到了解决方案,在我想要完成的事情上总是有细微的差别。 我试图获得所有可能的组合,稍微像这样:combination_k ,但我也希望相同的项目与
我正在尝试更新 1500 个 QuickBooks Online 库存项目的现有数量。我可以从商店中提取 1500 种产品。 这个更新可以做吗?我看到手头没有数量的物品: https://develo
我想与工作人员一起扩展应用程序。 可能有 1 名 worker 或 100 名 worker ,我想无缝扩展它们。 这个想法是使用副本集。然而,由于特定领域的原因,扩展它们的适当方法是让每个工作人员知
Android Studio 有没有办法显示 XML 布局中存在的 View 数量?众所周知,布局应该包含 <=80 个 View ,因此超过此值就会出现此警告,因此告知数量会非常有帮助。 Layou
虽然编码时总是出现有关 IBOutlet 保留计数的相同问题:从 NIB 取消归档对象后保留计数?何时对 IBOutlet 使用 @property?设置时保留还是分配? Mac 和 iPhone 之
我是一名优秀的程序员,十分优秀!