Laravel 队列侦听器超时
Laravel queue listener times out
在我的 Linux 服务器上,我有以下 cron:
* * * * * php /var/www/core/v1/general-api/artisan schedule:run >> /dev/null 2>&1
CRON 工作正常。我在 Kernel.php
中定义了一个预定命令,如下所示:
protected function schedule(Schedule $schedule)
{
$schedule->command('pickup:save')
->dailyAt('01:00');
$schedule->command('queue:restart')->hourly();
}
凌晨 1 点的计划任务 运行 是我的自定义命令 php artisan pickup:save
。这个命令唯一做的就是派发一个我定义的工作:
public function handle()
{
$job = (new SaveDailyPropertyPickup());
dispatch($job);
}
所以这个作业被分派了,因为我正在为我的队列使用数据库驱动程序,一个新行被插入到 jobs
table.
到目前为止一切正常。
因为我需要一个队列侦听器来处理队列,并且因为这个队列侦听器必须 运行 基本上永远,所以我这样启动队列侦听器:
nohup php artisan queue:listen --tries=3 &
这会将 nohup
中的所有日志写入我的 /home
目录中名为 nohup.out
的文件
发生了什么:第一次处理队列并执行我的 SaveDailyPropertyPickup
作业的 handle
函数中定义的代码。
执行一次后,我的队列侦听器退出。当我检查日志 nohup.out
时,我可以看到以下错误:
In Process.php line 1335:
The process "'/usr/bin/php7.1' 'artisan' queue:work '' --once --queue='default'
--delay=0 --memory=128 --sleep=3 --tries=3" exceeded the timeout of 60 seconds.
我检查了this answer,它说在我启动队列侦听器时将超时指定为 0,但也有不推荐这种方法的答案。我还没有尝试过,所以我不知道它是否适合我的情况。
对我目前的情况有什么建议吗?
Laravel版本是5.4
谢谢
使用超时参数调用它,计算出您的作业需要多长时间并从那里扩展。
nohup php artisan queue:listen --tries=3 --timeout=600
在您的配置中,您需要在之后更新重试,它必须大于超时,以避免同时进行相同的作业 运行。假设您使用 beanstalkd
.
'beanstalkd' => [
...
'retry_after' => 630,
...
],
在更专业的设置中,我经常最终会做一个短队列 运行 作业和一个长队列 运行 操作。
在我的 Linux 服务器上,我有以下 cron:
* * * * * php /var/www/core/v1/general-api/artisan schedule:run >> /dev/null 2>&1
CRON 工作正常。我在 Kernel.php
中定义了一个预定命令,如下所示:
protected function schedule(Schedule $schedule)
{
$schedule->command('pickup:save')
->dailyAt('01:00');
$schedule->command('queue:restart')->hourly();
}
凌晨 1 点的计划任务 运行 是我的自定义命令 php artisan pickup:save
。这个命令唯一做的就是派发一个我定义的工作:
public function handle()
{
$job = (new SaveDailyPropertyPickup());
dispatch($job);
}
所以这个作业被分派了,因为我正在为我的队列使用数据库驱动程序,一个新行被插入到 jobs
table.
到目前为止一切正常。
因为我需要一个队列侦听器来处理队列,并且因为这个队列侦听器必须 运行 基本上永远,所以我这样启动队列侦听器:
nohup php artisan queue:listen --tries=3 &
这会将 nohup
中的所有日志写入我的 /home
目录中名为 nohup.out
的文件
发生了什么:第一次处理队列并执行我的 SaveDailyPropertyPickup
作业的 handle
函数中定义的代码。
执行一次后,我的队列侦听器退出。当我检查日志 nohup.out
时,我可以看到以下错误:
In Process.php line 1335:
The process "'/usr/bin/php7.1' 'artisan' queue:work '' --once --queue='default'
--delay=0 --memory=128 --sleep=3 --tries=3" exceeded the timeout of 60 seconds.
我检查了this answer,它说在我启动队列侦听器时将超时指定为 0,但也有不推荐这种方法的答案。我还没有尝试过,所以我不知道它是否适合我的情况。
对我目前的情况有什么建议吗?
Laravel版本是5.4
谢谢
使用超时参数调用它,计算出您的作业需要多长时间并从那里扩展。
nohup php artisan queue:listen --tries=3 --timeout=600
在您的配置中,您需要在之后更新重试,它必须大于超时,以避免同时进行相同的作业 运行。假设您使用 beanstalkd
.
'beanstalkd' => [
...
'retry_after' => 630,
...
],
在更专业的设置中,我经常最终会做一个短队列 运行 作业和一个长队列 运行 操作。