Проблема с Laravel в очереди Джобса.Странное поведение, отличающееся для разработчика и производства - PullRequest
0 голосов
/ 09 ноября 2018

У меня странное поведение при выполнении задания: На сервере dev (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.

конфиг / queue.php

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

это происходит после того, как задание ставится в очередь ... когда оно начинает работать ... примерно через 30 секунд (Ошибка) исключение находится в таблице failed_jobs

Я думаю, это может зависеть от директивы php max_execution_time, но когда я это делаю

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

показывает ноль (без таймаута ... это правильно)

Задание ставится в очередь следующим образом:

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

Задание Sincronize не имеет тайм-аута (имеет 1 попытку) и просто вызывает две ремесленные команды, которые прекрасно работают как на prod, так и на сервере dev при вызове из оболочки.

https://pastebin.com/mnaHWq71

для запуска заданий на сервере dev, который я использую

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

на сервере prod Я использую это

https://pastebin.com/h7uv5gca

есть идеи, что может быть причиной?

1 Ответ

0 голосов
/ 09 ноября 2018

Нашел проблему ... был в моем сервисе /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"
;;

Я не проверял, запущен ли уже процесс, поэтому запускаю его дважды. Я видел 2 процесса в ps axu и кажется, что это было причиной Эта проверка решена

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