Laravel排队的乔布斯问题。开发人员和生产人员的奇怪行为不同

时间:2018-11-09 11:45:08

标签: php laravel laravel-5 queue artisan

运行Job时,我有一个奇怪的行为: 在开发服务器(Win 7 PHP 7.2.10)上,一切正常, 在生产服务器Linux centOS php 7.0.10上,它引发异常:

Illuminate\Queue\MaxAttemptsExceededException: A queued job has been attempted too many times. The job may have previously timed out.

config / queue.php

    'database' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'default',
        'retry_after' => 90,
    ],

这种情况发生在作业排队后...开始工作时...大约30秒后(失败) 例外是在fail_jobs表中

我虽然可能取决于php max_execution_time指令,但是当我这样做

php -r "echo ini_get('max_execution_time') . PHP_EOL;"

它告诉我零(没有超时...这是正确的)

作业以这种方式排队:

dispatch((new Syncronize($file))->onQueue('sync'));

Sincronize Job没有超时(尝试1次),只需要调用两个artisan命令(如果从shell调用就可以在prod和dev服务器上正常工作)。

https://pastebin.com/mnaHWq71

在我使用的开发服务器上启动作业

php artisan queue:work --queue=sync,newsletter,default

我在产品服务器上使用此

https://pastebin.com/h7uv5gca

对可能是什么原因有任何了解吗?

1 个答案:

答案 0 :(得分:1)

发现了问题... 在我的服务/etc/init.d/myservice

cd /var/www/html/
case "$1" in
start)
    php artisan queue:work --queue=sync,newsletter,default &
    echo $!>/var/run/myservice.pid
    echo "server daemon started"
;;

我没有检查该进程是否已经在运行,所以我启动了两次。 我在ps axu中看到了2个进程,这似乎是原因 此检查已解决

if [ -e /var/run/myservice.pid ]; then
   echo "Service is running. Call stop first".
   exit 1
fi