如何在共享主机上运行队列?

时间:2019-08-21 12:01:29

标签: laravel

我想在网站在线时在后台运行php artisan队列:

我从link开始尝试了这种方式,但是没有用:

我在app / Console / Kernel.php上编写了此功能

protected function osProcessIsRunning($needle)
{
    // get process status. the "-ww"-option is important to get the full output!
    exec('ps aux -ww', $process_status);

    // search $needle in process status
    $result = array_filter($process_status, function($var) use ($needle) {
        return strpos($var, $needle);
    });

    // if the result is not empty, the needle exists in running processes
    if (!empty($result)) {
        return true;
    }
    return false;
}

这段代码可以在schedule()方法中调用它

if (!$this->osProcessIsRunning('queue:work')) {

   $schedule->command('queue:work')->everyMinute();

}

如何在不使用 supervisor-configuration 的情况下执行类似的操作?

2 个答案:

答案 0 :(得分:0)

进行路由并以编程方式执行artisan命令。

Route::get('/queue', function(){
    $exitCode = \Illuminate\Support\Facades\Artisan::call('queue:work');
});

现在,点击此网址一次,您的队列:工作就会开始。

答案 1 :(得分:0)

在共享主机中,您必须具有SSH访问权限才能执行调度程序或cron作业。 没有外壳访问权,您将无法在laravel中运行调度程序。 即使我们尝试使用program运行,您也必须每次都无法运行该程序。 因此,推荐的方法是获得ssh访问或具有ssh访问的专用托管。

或要求您的提供者授予ssh访问权限。 然后在linux中尝试cron作业。即:crontabs,ecron,fcron。