【发布时间】:2013-12-26 17:57:15
【问题描述】:
我正在尝试将多个 linux 命令合并到一行中以执行部署操作。例如
nohup php 1.php
nohup php 2.php
nohup php 3.php
nohup php 4.php
我想并行执行所有这些,可以在 .sh 文件中执行吗?
【问题讨论】:
我正在尝试将多个 linux 命令合并到一行中以执行部署操作。例如
nohup php 1.php
nohup php 2.php
nohup php 3.php
nohup php 4.php
我想并行执行所有这些,可以在 .sh 文件中执行吗?
【问题讨论】:
你也可以这样做:
nohup sh -c 'php 1.php; php 2.php; php 3.php' &
编辑:
回答你的问题,这个过程是平行的。您可以通过编写ps 命令来验证这一点。
例如:使用sleep 命令:
nohup sh -c 'sleep 30 && sleep 30' &
输出:
....
6920 7340 7340 6868 pty2 17763 16:33:27 /usr/bin/sleep
6404 4792 4792 7004 pty2 17763 16:33:26 /usr/bin/sleep
....
编辑 2:
好的,然后尝试使用parallel 命令。 (你可能必须安装它)
创建文件cmd.txt:
1.php
2.php
3.php
然后执行这个命令(还没试过,但应该可以)。如果您的核心多于/少于 4 个,您可以更改 --max-procs 数字:
cat cmd.txt | parallel --max-procs=4 --group 'php {}'
希望它有效...
【讨论】:
you probably have to install it
sh -c "cat cmd.txt | parallel --max-procs=4 --group 'nohup php {}'&>/dev/null"& 知道之后如何关闭腻子会话。也许最后使用exit 命令,我现在无法测试。无论如何,如果我的回答对您有帮助,请标记为“已解决”。
在linux中你可以使用&&顺序执行命令,只有前一个命令成功后才会执行一个命令。
nohup php 1.php && nohup php 2.php && nohup php 3.php
编辑:如果您不想要 && 运算符提供的错误检查,请使用分号 (;) 链接命令,如下所示:
nohup php 1.php ; nohup php 2.php ; nohup php 3.php
【讨论】:
如果你不介意把它们放到后台,你可以把
& ;
在 1/2 和 2/3 之间。这将基本上并行执行 3。
&: 在 bg 中执行
;无论第一次成功与否,都执行第二次命令
【讨论】: