Назад | Перейти на главную страницу

Сигнал перезапуска App Engine Flex

У меня есть длительный процесс в Go на гибком экземпляре App Engine, развернутый через образ докера.

В большинстве случаев, когда я развертываю живую версию, она отправляет SIGTERM приложению. Я могу поймать это и аккуратно завершить работу. Здорово.

В других случаях кажется, что процесс просто исчезает, и создается новый экземпляр. Я не получаю никаких журналов; никаких указаний на то, что произошло. Это определенно происходит, если я изменяю количество экземпляров (с помощью manual_scaling), но иногда это происходит при обычном развертывании.

Есть ли способ получать SIGTERM постоянно? Есть ли другие стратегии, которые я могу использовать, чтобы узнать, когда экземпляр убивается / перезапускается?

Обновление: я попробовал несколько тестовых случаев:

  1. «Удалить» экземпляр в пользовательском интерфейсе App Engine. Экземпляр полностью отключился - отправил сигналы - и перезагрузился, поскольку он настроен на один экземпляр.
  2. Развернуть, изменив от 1 до 2 экземпляров. Существующий экземпляр полностью перезагружен с сигналами. Подошел новый экземпляр.
  3. Разверните, меняя с 2 на 1 экземпляр. Один существующий экземпляр перезагрузился чисто с сигналами. Другой пошел пуф из-за отсутствия лучшего описания. Просмотр «Все журналы», показывающий STDERR из моего приложения, ничего. Нет вывода в журналы vm.events, vm.syslog, vm.shutdown, которые сообщают много интересного во время перезагрузки. Я также знаю, что мое приложение не получало сигналов, потому что база данных осталась в грязном состоянии.

Это последний случай, о котором я хотел бы узнать больше, спасибо! Пожалуйста, дайте мне знать, есть ли лучшее место или способ задать этот вопрос.

В App Engine экземпляры Flex перезапускаются раз в неделю для применения критических обновлений в среде выполнения.

Этот перезапуск всегда получает SIGTERM и SIGKILL за 3 секунды до завершения перезапуска.

Если в вашем приложении процессы выполняются в течение длительного времени, и еженедельные перезапуски могут повлиять на них. Хорошей альтернативой для вас может быть запуск этого на Compute Engine, поскольку они больше контролируют пользователя и не перезапускаются еженедельно.

Я только что повторил и могу подтвердить, что:

  • При повторном развертывании 1 в 1 отправляются SIGTERM и SIGKILL.
  • При еженедельном перезапуске отправляются SIGTERM и SIGKILL.
  • Повторное развертывание увеличивающихся экземпляров отправляются SIGTERM и SIGKILL
  • Повторное развертывание уменьшающих экземпляров (от 2 до 1) Я вижу, что SIGTERM и SIGKILL отправляются на каждый экземпляр.

Эти журналы создаются в журнале: appengine.googleapis.com/vm.shutdown Поэтому, если вы хотите продолжить использование App Engine, вы можете дождаться этих сигналов, которые дадут вам 3 секунды до фактического завершения работы.