Надеюсь, на этот вопрос есть ответ, общий для Apache и Node.js, а не для Plesk (потому что я знаю, как вы относитесь к вопросам, касающимся Plesk!).
Недавно я решил добавить несколько текстовых уведомлений в серверное приложение Node.js, когда было обнаружено конкретное обновление. Пока я этим занимался, я подумал, что было бы неплохо добавить уведомления о запуске и завершении работы сервера. Это привело к нескольким неприятным открытиям:
- Примерно каждые 24 часа мой сервер (не вся серверная платформа, а только одно серверное приложение Node.js) перезагружался без уважительной причины между 3:30-4:30 утра.
- Не было изящного обнаружения выключения перед каждым перезапуском, поэтому кажется, что приложение Node.js сразу убивалось, а не отправлялось SIGINT или SIGTERM, которые я прослушивал.
- Даже используя (кашель), где вы можете запросить перезапуск приложения, плавный перезапуск не происходит. Приложение Node.js просто бесцеремонно убивают.
Перезапуск один раз в 24 часа после некоторого расследования, по-видимому, вызван ротацией журнала Apache. Почему простая ротация журналов должна вызывать это — еще одна загадка, которую предстоит разгадать.
Тем временем я хочу знать, есть ли способ убедиться, что ИЗЯЩНОЕ завершение работы происходит, независимо от того, происходят ли они из-за того, что Apache останавливается или завершает работу, или из-за нажатия кнопки «Перезапустить приложение».
Я ищу отключения, отслеживая эти сигналы:
process.on('SIGINT', выключение);
process.on('SIGTERM', выключение);
process.on('SIGUSR2', выключение); // Используется моими инструментами разработки
Есть ли другой сигнал, который я должен проверить?
Вместо этого процесс безжалостно завершается с помощью SIGKILL?
Если да, могу ли я изменить это, возможно, с некоторой задержкой, чтобы дать время для корректного завершения работы?