运行Laravel Artisan命令作为新进程

时间:2014-09-25 00:32:04

标签: php laravel artisan

所以一般来说你可以在php中说exec('MyCommand &> /dev/null &')并且MyCommand将作为一个单独的进程执行,所以你的主要php执行可以继续它的快乐方式。

奇怪的是,如果你尝试使用Laravel的Artisan来做这件事,那么就会出现问题。例如,令人惊讶的是,exec('php artisan command &> /dev/null &')结果仍然悬挂在工匠命令完成之前。如果将artisan命令包装在bash脚本中,它将根本不执行。

为什么会这样,以及如何在新的分离过程中执行artisan命令?

1 个答案:

答案 0 :(得分:1)

您必须创建一个新流程才能运行它:

$pid = pcntl_fork();

switch($pid)
{
    case -1:    // pcntl_fork() failed
        die('could not fork');

    case 0:    // you're in the new (child) process
        exec("php artisan command");

        // controll goes further down ONLY if exec() fails
        echo 'exec() failed';

    default:  // you're in the main (parent) process in which the script is running
        echo "hello";
}