Рейтинг:0

Как добиться корректного завершения работы Node.js на Apache/CentOS/Plesk?

флаг br

Надеюсь, на этот вопрос есть ответ, общий для Apache и Node.js, а не для Plesk (потому что я знаю, как вы относитесь к вопросам, касающимся Plesk!).

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

  1. Примерно каждые 24 часа мой сервер (не вся серверная платформа, а только одно серверное приложение Node.js) перезагружался без уважительной причины между 3:30-4:30 утра.
  2. Не было изящного обнаружения выключения перед каждым перезапуском, поэтому кажется, что приложение Node.js сразу убивалось, а не отправлялось SIGINT или SIGTERM, которые я прослушивал.
  3. Даже используя (кашель), где вы можете запросить перезапуск приложения, плавный перезапуск не происходит. Приложение Node.js просто бесцеремонно убивают.

Кнопка перезапуска приложения Node.js

Перезапуск один раз в 24 часа после некоторого расследования, по-видимому, вызван ротацией журнала Apache. Почему простая ротация журналов должна вызывать это — еще одна загадка, которую предстоит разгадать.

Тем временем я хочу знать, есть ли способ убедиться, что ИЗЯЩНОЕ завершение работы происходит, независимо от того, происходят ли они из-за того, что Apache останавливается или завершает работу, или из-за нажатия кнопки «Перезапустить приложение».

Я ищу отключения, отслеживая эти сигналы:

process.on('SIGINT', выключение);
process.on('SIGTERM', выключение);
process.on('SIGUSR2', выключение); // Используется моими инструментами разработки

Есть ли другой сигнал, который я должен проверить? Вместо этого процесс безжалостно завершается с помощью SIGKILL? Если да, могу ли я изменить это, возможно, с некоторой задержкой, чтобы дать время для корректного завершения работы?

Michael Hampton avatar
флаг cz
Вы проверили журнал своего приложения?
kshetline avatar
флаг br
Я не вижу там ничего полезного, если только я не знаю нужных журналов для просмотра. В логах апача ничего не вижу. В `/var/log/httpd/error_log`, куда идет весь вывод Node.js (будь то из stdout или stderr), все, что я вижу, это то, что мой Node.js весело работает, а затем перезапускается без намека на то, зачем это нужно. перезапустить.
Michael Hampton avatar
флаг cz
Я думаю, что на данный момент мы мало что можем сделать. Вам нужно покопаться в том, что делает Plesk, либо когда вы нажимаете эту кнопку перезапуска, либо что он делает в 3:30 утра, скорее всего, и то, и другое.
kshetline avatar
флаг br
Я не был уверен, связана ли эта проблема с Plesk или может существовать стандартная реализация для использования Node.js с Apache, а также общие рекомендации, связанные с Apache. Несколько дней назад я написал на talk.plesk.com, и пока... сверчки!
kshetline avatar
флаг br
Когда я ввел «plesk» в качестве тега для этого сообщения, для этого тега было предупреждение о том, что большинство вопросов о Plesk относится к webmasters.stackexchange.com. Однако этот же вопрос был закрыт как не по теме, поэтому я надеюсь, что кто-то может помочь здесь. Форум Plesk молчит по этому поводу.
Michael Hampton avatar
флаг cz
Не существует стандартного способа запуска приложения Node.js. Вам придется выяснить, как это делает Plesk, и мы не можем с этим помочь.

Ответить или комментировать

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