【发布时间】:2019-08-20 22:55:30
【问题描述】:
在我的 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 表中。
到目前为止一切正常。
由于我需要一个队列监听器来处理队列,并且这个队列监听器必须基本上永远运行,所以我这样启动队列监听器:
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
谢谢
【问题讨论】:
-
这项工作是做什么的,可能需要超过 60 秒?
标签: php laravel laravel-5.4