Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在laravel中在后台调用队列工作者_Php_Laravel_Ssh_Background - Fatal编程技术网

Php 如何在laravel中在后台调用队列工作者

Php 如何在laravel中在后台调用队列工作者,php,laravel,ssh,background,Php,Laravel,Ssh,Background,我不能在我的服务器上安装Supervisor,我希望使用比CRON更灵活的方式来运行队列工作程序。 我尝试从SSH(Putty)-works调用artisan命令,但我想从网站管理它们, 所以我测试了PHP exec和Symfony进程类,还下载了Laravelcollective remote。 每次没有进程运行时,我甚至没有得到任何错误,只是什么都没有 Exec public function call_worker(){ $cmd = '(cd ' . dirname(ge

我不能在我的服务器上安装Supervisor,我希望使用比CRON更灵活的方式来运行队列工作程序。 我尝试从SSH(Putty)-works调用artisan命令,但我想从网站管理它们, 所以我测试了PHP exec和Symfony进程类,还下载了Laravelcollective remote。 每次没有进程运行时,我甚至没有得到任何错误,只是什么都没有

Exec
public function call_worker(){
        $cmd = '(cd ' . dirname(getcwd()) . '/; php artisan queue:work)';
        exec($cmd);
    }

从symfony进程中,我得到一个错误255 Uknown错误。 “ls”命令每次都是这样运行的。 提前谢谢

@编辑是否会因为“lsphp”而成为问题? @edit2我使用下面的代码在后台运行worker。 我可能会遇到更多的问题,如果是这样,我会发布它们

public function call_worker(){
        //echo shell_exec(dirname(getcwd()) . ' ls');
        //echo shell_exec('ls');
        $php = '/opt/alt/php73/usr/bin/php';
        $cmd = ' artisan queue:work';
        $process = new Process('/opt/alt/php73/usr/bin/php artisan queue:work &');
        $process->setWorkingDirectory(dirname(getcwd()) . '/');
        //$process = Process::fromShellCommandline('echo "$MESSAGE"');
        $process->start();
        $pid = $process->getPid();
        echo $pid;
        foreach ($process as $type => $data) {
    if ($process::OUT === $type) {
        echo "\nRead from stdout: ".$data;
    } else { // $process::ERR === $type
        echo "\nRead from stderr: ".$data;
    }
    }
        echo $process->getOutput();
    }

问题是您的托管限制太严格,不允许您运行长时间运行的进程,例如
php artisan queue:work
命令?如果是这样的话,答案可能是找到其他主机。事实上,在过去,我错误地做了一个循环,我不得不手动终止它,cron一直调用schedule(workers)并以这种方式执行一些任务,在早期阶段,我运行worker时没有运行worker——曾经,它填满了内存并运行了很长一段时间,直到我注意到这一点。我会问他们是否像你所说的那样,但我怀疑是否有可能使用
而不使用overlapping()
方法以Laravel任务调度程序命令的形式运行队列工作程序,以防止重复进程。有关更多信息,请参阅此答案:只需跳过有关
supervisor
的部分。
SSH in PHP
public function call_worker(){
        $cmd = '(cd ' . dirname(getcwd()) . '/; php artisan queue:work)';
        \SSH::run($cmd, function($line)
    {
        echo $line.PHP_EOL;
    });

public function call_worker(){
        $cmd = '(cd ' . dirname(getcwd()) . '/; php artisan queue:work) &';
        \SSH::run($cmd, function($line)
    {
        echo $line.PHP_EOL;
    });

Symfony Process class
public function call_worker(){
   $cmd = 'php artisan queue:work';
   $process = new Process($cmd);
   $process->setWorkingDirectory(dirname(getcwd()) . '/');
   $process->start();
}
public function call_worker(){
        //echo shell_exec(dirname(getcwd()) . ' ls');
        //echo shell_exec('ls');
        $php = '/opt/alt/php73/usr/bin/php';
        $cmd = ' artisan queue:work';
        $process = new Process('/opt/alt/php73/usr/bin/php artisan queue:work &');
        $process->setWorkingDirectory(dirname(getcwd()) . '/');
        //$process = Process::fromShellCommandline('echo "$MESSAGE"');
        $process->start();
        $pid = $process->getPid();
        echo $pid;
        foreach ($process as $type => $data) {
    if ($process::OUT === $type) {
        echo "\nRead from stdout: ".$data;
    } else { // $process::ERR === $type
        echo "\nRead from stderr: ".$data;
    }
    }
        echo $process->getOutput();
    }