繁体   English   中英

如何在后台为具有 args 的命令运行命令

[英]How to run a command in background for a command that have args

我正在尝试在 PHP 中执行一个命令以在后台运行,以便 PHP 脚本不必等待脚本完成。 我正在尝试使用这个:

exec('bash -c "exec nohup setsid COMMAND_HERE > /dev/null 2>&1 &"');

不幸的是,我的命令需要参数并且/dev/null 2>&1 &不起作用我猜它会进入我的 phantomjs 的系统参数。

exec('bash -c "exec nohup setsid cd /var/www/html/smartgood/'.$i.' && phantomjs dump2.js '.date('d').' '.date('m').' > /dev/null 2>&1 &"');

其中date('d').' '.date('m') date('d').' '.date('m')是我运行脚本所需的参数。

知道如何修复它,或者是否有另一种方法可以在 PHP 中运行该行而无需等待我的 phantomjs 脚本完成?

你在那里有两个命令,所以只有第二个被重定向到 /dev/null。 为了保持简单和可维护,我会将所有这些命令移动到一个单独的 bash 文件中并运行它。

像这样(需要检查语法):

/path/to/script.sh:

#!/bin/bash
exec nohup setsid cd /var/www/html/smartgood/$1
phantomjs dump2.js $2 $3

然后运行它:

exec('bash -c /path/to/script.sh ' . $i .' ' .date('d').' '.date('m') . ' > /dev/null 2>&1 &"');

尝试使用我前段时间写的这个简洁的函数。 它也具有跨平台支持,因此可以在 linux 和 windows 上运行

function execInBackground($cmd) {
    if (substr(php_uname(), 0, 7) == "Windows"){
        pclose(popen("start /B ". $cmd, "r"));
    }
    else {
        exec($cmd . " > /dev/null &");
    }
}

只需将您的节点命令传递到execInBackground并观察它的工作:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM