- Запустите запланированное задание в другом контейнере, чтобы вы могли масштабировать его независимо от приложения laravel.
- Запустите несколько контейнеров запланированного задания, чтобы некоторые из них можно было остановить, чтобы обновить их, пока старыепродолжит обработку заданий.
- Docker отправит сигнал SIGTERM контейнеру и дождется, когда контейнер будет корректно завершен, прежде чем выдать SIGKILL (время между этими двумя сигналами настраивается, по умолчанию 10 секунд).Это позволит аккуратно завершить текущую работу (или сохранить контрольную точку для продолжения позже).
План состоит в том, чтобы остановить старые контейнеры и постепенно запускать новые контейнеры, чтобы не было потерянных заданий или простоев.Если вы используете оркестратор, такой как Docker Swarm или Kubernetes, они будут обрабатывать большую часть этой логистики для вас.
Примечание: планировщик laravel основан на cron и будет запускать процессы, которые будут убиты docker.Чтобы предотвратить это, планировщик должен добавить задание в очередь laravel.Очередь является приоритетным процессом, и SIGTERM получит возможность аккуратно остановить / сохранить ее, которую она получит перед уничтожением.