На моем сервере 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:00 выполняет мою пользовательскую команду php artisan pickup:save
.Единственное, что делает эта команда, это отправляет задание, которое я определил:
public function handle()
{
$job = (new SaveDailyPropertyPickup());
dispatch($job);
}
Итак, это задание отправлено, и, поскольку я использую драйвер базы данных для своих очередей, в jobs
вставляется новая строкатаблица.
Здесь все до сих пор прекрасно работает.
Поскольку мне нужен обработчик очереди для обработки очереди, и так как этот прослушиватель очереди должен работать в основном вечно, я запускаю прослушиватель очереди следующим образом:
nohup php artisan queue:listen --tries=3 &
Это запишет все журналы из nohup
в файл с именем nohup.out
в моем /home
каталоге
Что происходит так: в первый раз очередь обрабатываетсяи код, определенный в функции handle
моего задания SaveDailyPropertyPickup
, выполняется.
ПОСЛЕ того, как он выполняется один раз, мой слушатель очереди просто выходит из .Когда я проверяю журналы 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.
Я проверил этот ответ , и он говорит, чтобы указать время ожидания как 0, когда я запускаю прослушиватель очереди, ноЕсть также ответы, не рекомендующие этот подход.Я не пробовал, поэтому не знаю, сработает ли это в моей ситуации.
Есть ли какие-нибудь рекомендации для моей текущей ситуации?
Версия Laravel - 5.4
Спасибо