У меня есть длительный процесс в Go на гибком экземпляре App Engine, развернутый через образ докера.
В большинстве случаев, когда я развертываю живую версию, она отправляет SIGTERM приложению. Я могу поймать это и аккуратно завершить работу. Здорово.
В других случаях кажется, что процесс просто исчезает, и создается новый экземпляр. Я не получаю никаких журналов; никаких указаний на то, что произошло. Это определенно происходит, если я изменяю количество экземпляров (с помощью manual_scaling), но иногда это происходит при обычном развертывании.
Есть ли способ получать SIGTERM постоянно? Есть ли другие стратегии, которые я могу использовать, чтобы узнать, когда экземпляр убивается / перезапускается?
Обновление: я попробовал несколько тестовых случаев:
Это последний случай, о котором я хотел бы узнать больше, спасибо! Пожалуйста, дайте мне знать, есть ли лучшее место или способ задать этот вопрос.
В App Engine экземпляры Flex перезапускаются раз в неделю для применения критических обновлений в среде выполнения.
Этот перезапуск всегда получает SIGTERM и SIGKILL за 3 секунды до завершения перезапуска.
Если в вашем приложении процессы выполняются в течение длительного времени, и еженедельные перезапуски могут повлиять на них. Хорошей альтернативой для вас может быть запуск этого на Compute Engine, поскольку они больше контролируют пользователя и не перезапускаются еженедельно.
Я только что повторил и могу подтвердить, что:
Эти журналы создаются в журнале: appengine.googleapis.com/vm.shutdown
Поэтому, если вы хотите продолжить использование App Engine, вы можете дождаться этих сигналов, которые дадут вам 3 секунды до фактического завершения работы.