我试图在一行中合并多个linux命令来执行部署操作。例如
nohup php 1.php
nohup php 2.php
nohup php 3.php
nohup php 4.php
我希望他能并行完成所有这些,这有可能吗? .sh文件? 坦克你
答案 0 :(得分:3)
在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 :(得分:1)
如果您不介意将它们放入后台,可以通过添加
来实现 & ;
在第1 /第2和第2 /第3之间。这将基本上并行地执行3。
&amp ;:执行bg
;不管第1次成功与否,都要做第2次命令
答案 2 :(得分:0)
你也可以这样做:
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 {}'
希望它有效......