【问题标题】:PHP how to run multi bash command in backgroundPHP如何在后台运行多个bash命令
【发布时间】:2020-06-29 08:59:21
【问题描述】:

在后台运行一个命令,效果很好。

$cmd = 'ffmpeg -re -i ./97.mp4 -vcodec copy -acodec copy -f flv -y rtmp://example.com/c/190843?auth_key=7e2682b5 > output 2>&1 </dev/null &';
exec($cmd, $output, $return_var);

然后我需要在ffmpeg 命令之前睡一段时间。我指的是How do I run multiple background commands in bash in a single line?,它直接在 bash 控制台中运行良好。

虽然在下面的 PHP 脚本中不起作用,但它会在 bash 命令完成运行时返回。

$cmd = '(sleep 5; ffmpeg -re -i ./97.mp4 -vcodec copy -acodec copy -f flv -y rtmp://example.com/c/190843?auth_key=7e2682b5 > output 2>&1 </dev/null) &';
exec($cmd, $output, $return_var);

【问题讨论】:

    标签: php bash exec


    【解决方案1】:

    我觉得你还需要处理sleep的stdout/stderr。

    ( sleep 5 > /dev/null 2>&1; ...; ) &
    

    或者你可以把重定向放在( ... )之后:

    ( sleep 5; ffmpeg ...no redir here...; ) < /dev/null > /dev/null 2>&1 &
    

    【讨论】:

      【解决方案2】:

      从 bash 命令运行多个命令;使用 && 连接。

      例如:

      sleep 5 && echo hello && sleep 2 && echo world
      

      这个技巧在 cron 任务中特别有用,可以在同一分钟内对多个项目进行排序,因为在启动命令之前可以使用不同的睡眠值作为偏移量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-14
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 1970-01-01
        • 2015-07-26
        • 2018-11-09
        • 1970-01-01
        相关资源
        最近更新 更多