[Документация Yandex Cloud](../../index.md) > [Yandex Serverless Containers](../index.md) > [Концепции](index.md) > Уведомления о завершении выполнения контейнера

# Уведомления о завершении выполнения контейнера

В некоторых случаях сервис может принудительно остановить [экземпляр контейнера](container.md#container-instance). При этом в пользовательское приложение поступает _уведомление о предстоящем принудительном завершении работы_. 

В зависимости от таймаута, заданного в настройках [ревизии контейнера](container.md#revision), и текущего состояния экземпляра контейнера, существует два типа таких уведомлений:

* [для активных экземпляров долгоживущих контейнеров](#notify-when-active);
* [для неактивных экземпляров контейнеров](#notify-when-idle).

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

## Уведомление кода Docker-образа в активном экземпляре долгоживущего контейнера {#notify-when-active}

Этот тип уведомления направляется в пользовательское приложение при соблюдении следующих условий:

* контейнер является [долгоживущим](long-lived-containers.md);
* до истечения таймаута, заданного в настройках ревизии контейнера, остается более десяти минут;
* экземпляр контейнера в текущий момент активен, то есть обрабатывает как минимум один вызов.

Уведомление о предстоящей принудительной остановке экземпляра контейнера отправляется в пользовательское приложение за десять минут до момента принудительного завершения работы экземпляра. В качестве уведомления отправляется [POSIX-сигнал](https://man7.org/linux/man-pages/man7/signal.7.html) `Termination signal` — [SIGTERM](https://ru.wikipedia.org/wiki/SIGTERM).

Добавьте в код приложения в Docker-образе обработчик, который будет реагировать на поступающий от операционной системы POSIX-сигнал `SIGTERM`. Это позволит избежать потери данных в случае нештатного завершения обработки вызова, обусловленного принудительной остановкой экземпляра контейнера.

Если в долгоживущем контейнере нет обработчика сигнала `SIGTERM`, то после отправки уведомления приложение пользователя будет закрыто операционной системой как приложение, проигнорировавшее сигнал завершения.

Вы можете отключить рассылку сигналов о предстоящей принудительной остановке экземпляра контейнера. Для этого в ревизию контейнера необходимо добавить переменную окружения `X_YCF_NO_GRACEFUL_SHUTDOWN_SIGNAL` со значением `1`. В этом случае у экземпляра контейнера будет также десять минут на завершение работы, но уведомление о принудительной остановке в код Docker-образа направляться не будет.

## Уведомление кода Docker-образа в неактивном экземпляре контейнера {#notify-when-idle}

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

При принятии решения о принудительном завершении работы неактивного экземпляра контейнера в пользовательское приложение сначала направляется POSIX-сигнал `SIGTERM`, а затем (спустя 50 миллисекунд) — POSIX-сигнал `SIGKILL`, который принудительно остановит процесс.

Такая остановка экземпляра контейнера принудительно завершает все сетевые соединения на уровне L3 [сетевой модели OSI](https://ru.wikipedia.org/wiki/Сетевая_модель_OSI).

В коде приложения в Docker-образе вы можете использовать обработчик, чтобы перехватить поступивший сигнал `SIGTERM`. Так вы сможете, например, штатно завершить сессии в сетевых соединениях (на уровне L7 сетевой модели OSI).

{% note info %}

С момента отправки сигнала `SIGTERM` у Docker-образа есть не более 50 миллисекунд на выполнение необходимых операций.

{% endnote %}

Отправка уведомлений в пользовательское приложение неактивного экземпляра контейнера — безусловная. Она не зависит от заданного в ревизии контейнера значения таймаута. Отключить отправку таких уведомлений или изменить время ожидания нельзя.