Как обновить рабочий код работников очереди Laravel в контейнере docker

#laravel #docker #supervisord

Вопрос:

У меня есть экземпляр Laravel, работающий внутри контейнера docker. У меня также есть супервайзер, который следит за работой некоторых работников очереди. В моем Dockerfile , у меня есть это:

 CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
 

supervisord.conf включает в себя другие файлы конфигурации, в том числе laravel-worker.conf , которые выглядят следующим образом:

 [program:laravel-worker]
directory=/var/www
process_name=%(program_name)s_%(process_num)02d
command=php artisan queue:work --sleep=3 --tries=3 --timeout=950
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=20
redirect_stderr=true
stdout_logfile=/var/www/logs/queue-worker-error.log
stdout_logfile_maxbytes=524288
stderr_logfile=/var/www/logs/queue-worker-error.log
stderr_logfile_maxbytes=524288
stopwaitsecs=3600
priority=6
 

У меня есть еще .conf один файл, в котором выполняется этот сценарий bash:

 while true
do
    php /var/www/artisan schedule:run --no-interaction amp;
    sleep 60
done
 

Я не знаю, имеет ли какое-либо значение этот код. Моя проблема в том, что, когда я обновляю свой PHP-код, задания продолжают пытаться использовать старый код. Я попробовал следующее:

  • перезапуск рабочих с помощью php artisan queue:restart
  • php artisan queue:flush
  • перезапуск контейнера с помощью docker restart <container>
  • удаление контейнера и изображения и их перестройка

Теперь я не знаю, что предпринять, и я раздражен. Что мне следует попробовать дальше?

Комментарии:

1. Как вы обновляете код? PHP не будет перезагружать код во время выполнения, поэтому вам, по крайней мере, нужно полностью остановить работника

2. @NicoHaase Что ты имеешь в виду? Как это остановить? Вот что я хочу знать. php artisan queue:restart была попытка сделать именно это

3. Повлияет queue:restart ли это также на процесс, запускаемый через супервайзера? Если бы даже перестройка контейнера не помогла, я бы предположил, что вам следует искать проблему в другом месте, так как это похоже на то, что создание самого изображения не работает должным образом