#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
ли это также на процесс, запускаемый через супервайзера? Если бы даже перестройка контейнера не помогла, я бы предположил, что вам следует искать проблему в другом месте, так как это похоже на то, что создание самого изображения не работает должным образом