У меня есть веб-api ASP. NET Core 2.1, работающий на веб-хосте CentOS, и я бы хотел, чтобы этот api оставался активным в том маловероятном случае, если процесс был прерван ОС или из-за внутреннее фатальное исключение.
Моя текущая настройка
У меня есть сценарий bash, который время от времени проверяет наличие запущенного процесса, соответствующего API. Если он не найден, он запускает dotnet <myapi>.dll ...
и перезапускает api. Это работает, но это немного беспорядочно, так как мне нужно иметь несколько заданий cron для разных сред api (test, prod, et c), и может быть некоторая задержка между тем, когда api умирает, и когда запускается задание cron чтобы перезапустить его. У меня также есть отклонения в сценарии bash для разных сред.
Вариант 2
Недавно я наткнулся на IApplicationLifetime
(я знаю, что есть более новая версия это, но я нахожусь на. NET Core 2.1) и это событие ApplicationStopped
. У меня возникает соблазн просто зарегистрировать делегата, когда приложение остановится, и просто перезапустить его? Таким образом, я не загрязняю свой crontab и могу немедленно отреагировать, вместо того, чтобы ждать, пока сработает задание cron.
Есть ли недостатки у варианта 2? Как все остальные в мире. NET Core справятся с этим случаем, когда вы хотите сохранить api в рабочем состоянии (пока вы этого не сделаете)?
Спасибо!