运行Laravel队列:在共享主机上工作

lul*_*ezy 3 laravel laravel-queue

我希望我的laravel队列:在共享主机上继续运行的工作,这是共享主机(不是在VPS上),我什么都不能安装,因为在搜索此建议时几乎所有在线资源都建议安装主管。所以基本上我以为我可以创建一个cron作业,检查队列是否未运行并启动它,有关如何执行此操作的任何帮助,因为有点卡住了,谢谢。

Linux服务器和Laravel 5.3上的PS Am

sha*_*ari 17

Laravel >= 5.7

将此行添加到 app\Console\Kernel.php 中的调度程序中,然后设置 cron 作业来运行调度程序,可确保队列每分钟得到服务。

$schedule->command('queue:work --stop-when-empty')
    ->everyMinute()
    ->withoutOverlapping();
Run Code Online (Sandbox Code Playgroud)

对于 Cpanel 服务器,Cron 语句可能如下所示:

* * * * * /usr/local/bin/php /home/{account_name}/live/artisan schedule:run
Run Code Online (Sandbox Code Playgroud)

其中 {account_name} 是运行 cpanel 的用户帐户,live 是 laravel 应用程序的文件夹

来源:https ://talltips.novate.co.uk/laravel/using-queues-on-shared-hosting-with-laravel

Laravel <= 5.6

--once运行一项作业后强制退出

--tries一项作业可以尝试的最大次数

--timeout可以指定作业可以运行的最大秒数

withoutOverlapping()默认情况下,即使任务的前一个实例仍在运行,计划任务也会运行。为了防止这种情况,您可以使用 withoutOverlapping 方法

sendOutputTo()将输出发送到文件以供以后检查

$schedule->command('queue:work --timeout=60 --tries=1 --once')
    ->everyMinute()
    ->withoutOverlapping()
    ->sendOutputTo(storage_path() . '/logs/queue-jobs.log');
Run Code Online (Sandbox Code Playgroud)

Laravel 所有版本

如果您不想使用“--once”或“--max-time”选项,最好使用重新启动命令来避免内存泄漏并应用代码更改。

$schedule->command('queue:restart')
    ->everyFiveMinutes();
Run Code Online (Sandbox Code Playgroud)

Laravel <= 5.2

不建议:

--daemon 选项继续运行,如果您具有 ssh 或 cpanel“命令”访问权限,则可以从命令行运行一次。


Sur*_*amy 7

如前所述,您正在使用共享主机,请按照以下步骤操作。

步骤1. 您需要将队列驱动程序设置为database

步骤2 您需要使用以下命令来设置cron作业 php /path/to/application/artisan queue:work --queue=high,default

你可以试试看。我希望它能起作用。

  • 但这种方法会消耗大量 RAM,如何避免呢? (2认同)
  • @Ishaan您可能需要添加一个像这样的标志 php artisan queue:work --queue=high,default --stop-when-empty (2认同)

Ami*_*ghi 7

最好的方法是在面板任务上设置以下命令(我正在使用 plesk 控制面板,它使我能够在那里设置任务)

php artisan queue:work --once
Run Code Online (Sandbox Code Playgroud)

注意:在我的共享主机中,由于其服务器配置,我必须设置以下值:

  1. php: /opt/plesk/php/7.2/bin/php -q
  2. 工匠: /var/www/vhosts/t4f.ir/httpdocs/artisan
  3. 我的命令:那么我应该写命令

所以,结果会是这样的:

/opt/plesk/php/7.2/bin/php -q /var/www/vhosts/t4f.ir/httpdocs/artisan queue:work --once
Run Code Online (Sandbox Code Playgroud)

还有另一个运行时选项,我将其设置为 Cron 类型,值为:* * * * *这意味着,每分钟都会执行此代码。正如我在命令末尾使用 --once 一样,一旦执行命令并且作业完成,它将被终止。关于并发执行,我并不担心,因为它是在排队系统中处理的,并且是该系统的责任。


art*_*tem 7

使用 Laravel 8,您可以选择--max-time让它queue:work在一段时间后停止作业处理。

php artisan queue:work --max-time=300
Run Code Online (Sandbox Code Playgroud)

您可以设置一个 cron 作业,例如每 5 分钟运行一次作业处理,并将选项设置--max-time为 5 分钟(300 秒)。在这种情况下,cron 将运行作业处理,300 秒后queue:work退出,几秒钟后,cron 将再次运行作业处理,依此类推。