barkalov
@barkalov

Как работает демонизация node.js в Ubuntu?

Сразу извиняюсь, если для кого-то вопрос покажется глупым — я с Linux неделю.

Я знаю, существуют:
  • Демоны вроде smbd, которые запускаются утилитами start/restart/etc...
  • Серверы вроде nginx, которые запускаются через /etc/init.d командами start/restart/etc...
  • Наверняка, ещё около триллиона других способов автозапустить что-то в фоне.

Вопрос №1: Какой именно способ демонизации считается наиболее каноничным и идеалогически верным в Ubuntu.
Вопрос №2: Каким образом правильнее всего это сделать с node.js приложением? Решений гуглится слишком много: от node-way forever и daemonize2, до хардкорного nohup &. Как правильно?

В идеале хочется (в порядке важности):
  1. Ubuntu-way.
  2. Простая установка решения на боевой сервер.
  3. Проброс события stop/restart/etc... в node, чтобы была возможность деинициализироваться, перед тем как убьётся процесс.
  4. Dev-mode с автоперезапуском после unhandlend exception.

Спасибо за помощь.
  • Вопрос задан
  • 3719 просмотров
Решения вопроса 3
Kaaboeld
@Kaaboeld
Web-разработчик
Ответ написан
Комментировать
qfox
@qfox
Ответы есть у меня
Нам понравился supervisor. И для dev, и для production. Работает как master процесс, которые стартует и перестартует любые приложения, в т.ч. и такие, как node.js.

supervisord.org
OpenSource на гитхабе: https://github.com/Supervisor/supervisor
Есть всякие web морды: https://github.com/Jahaja/supervisor-webctl
Написан на питоне, но это ему не мешает ни сколько.

Что умеет из коробки:
Удобное API для работы (поэтому и есть возможность писать веб морды),
Позволяет перенаправлять стандартные потоки IO, запускает как надо и под нужным пользователем,
Сам перезапускает сервисы при падении,
Позволяет проверять запущенные сервисы и удаленно, и через ctl, и через всякие third-party приложения,
Позволяет собирать конфиг из кусочков, в т.ч. по wildcard, как апач/nginx, и тем самым дает возможность иметь отдельные конфиги для каждого приложения,
Документация,
Ну и проект живой, это очень важно https://github.com/Supervisor/supervisor/commits/master

Очень удобно использовать вместе с чем-то типа капистрано.

Единственное, что нам не понравилось — это то, что его самого (мастер процесс) приходится запускать от рута, чтобы иметь возможность запускать процессы из под других пользователей. Но это сложно обойти на уровне безопасности самого юникса, поэтому, забили.
Ответ написан
barkalov
@barkalov Автор вопроса
Добавлю от себя: вот наиболее расово верный в Ubuntu способ автозапускать forever как демон.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
madmages
@madmages
Человек прямоходящий
screen node server.js
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы