【问题标题】:combine multiple linux commands in one line在一行中组合多个 linux 命令
【发布时间】: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 centos centos5


    【解决方案1】:

    你也可以这样做:

    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 {}'
    

    希望它有效...

    【讨论】:

    • 它工作正常但一个接一个不并行,如何并行运行所有文件?
    • 当我运行 php 文件并获取 uptput 时,我看到文件一个接一个地运行,而不是并行运行......
    • @user3083317,阅读我写的内容:you probably have to install it
    • 是否可以阻止输出的打印?
    • 这应该可以,输出不会打印在屏幕上,进程将在后台运行:sh -c "cat cmd.txt | parallel --max-procs=4 --group 'nohup php {}'&>/dev/null"& 知道之后如何关闭腻子会话。也许最后使用exit 命令,我现在无法测试。无论如何,如果我的回答对您有帮助,请标记为“已解决”。
    【解决方案2】:

    在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
    

    【讨论】:

      【解决方案3】:

      如果你不介意把它们放到后台,你可以把

        & ;     
      

      在 1/2 和 2/3 之间。这将基本上并行执行 3。

      &: 在 bg 中执行
      ;无论第一次成功与否,都执行第二次命令

      【讨论】:

      • 上面应该做到这一点。如果你之后用 'ps' 检查,你会看到 3 个 php 实例正在运行(假设它们足够长,至少需要几秒钟)。处理器为您处理。
      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 2012-08-31
      相关资源
      最近更新 更多