2017-02-06 3 views
2

Я попытался запустить планировщик в Laravel 5.3 с помощью следующего кода в App/Console/Kernel.phpLaravel планировщик задач не работает

protected function schedule(Schedule $schedule) 
{ 
    $schedule->command('queue:work')->everyMinute()->withoutOverlapping(); 
} 

и установить хрон рабочих мест в мой виртуальный хостинг со следующим:

* * * * * php /home/username/public_html/laravel/artisan schedule:run >> /dev/null 2>&1 

но он не работает на моем общем хостинге

Я использовал драйвер базы данных для своей очереди, а попытки 0, которые являются очередью, не выполняются планировщиком задач.

Любой может помочь мне с этой проблемой?

ответ

1

Несколько вещей, которые вы могли бы хотеть, чтобы проверить:

очереди: работа

Обратите внимание, что после того, как очередь: начал командную работу, он будет продолжать перспективы, пока не будет остановлен вручную или вы закрываете терминал. https://laravel.com/docs/5.3/queues#running-the-queue-worker

Вы уверены, что вы хотите, чтобы породить новый процесс с планировщиком каждую минуту?

питания планировщик

график мастеровых: команда запуска необходимо запускать каждую минуту для того, чтобы планировщик для работы. Это может быть сделано с помощью cron: https://laravel.com/docs/5.3/scheduling#introduction

+0

Извините, я еще не объяснил, что задал задания cron, я установил задания cron, каждую минуту «* * * * * php/home/username/public_html/laravel/artisan schedule: run >/dev/null 2> & 1 " – brobrobrobrobro

+0

Так работает ли планировщик в вашей локальной среде? Кроме того, напишите свою собственную простую команду, которая регистрирует что-то и пытается запланировать ее. –

0

Я использую виртуальный хостинг на A2hosting и команда, которая работает для меня

nohup php artisan queue:work & 

& обеспечивает команда продолжает работать и с поЬир процесс не будет убит, даже если вы выйти или закрыть терминал.

UPDATE: Если вы можете запускать команды оболочки из PHP, это решение, которое я в конце концов реализовал. Через 3 дня он работает так, как ожидалось. Выполняется только один экземпляр queue:work, и он запускается только после его прекращения работы. Расписание работает каждую минуту.

if (! strstr(shell_exec('ps xf'), 'php artisan queue:work')) 
    { 
     $schedule->command('queue:work')->everyMinute(); 
    } 

Вы также можете найти на queue:work вместо php artisan queue:work. Запустите shell_exec('ps xf') в tinker и посмотрите, что вы получите.