Как запустить сервер node.js как процесс-демон? - PullRequest
75 голосов
/ 05 февраля 2011

В Python Twisted у вас есть команда twistd, которая поможет вам с рядом вещей, связанных с запуском вашего приложения (например, демонизировать его).

Как вы демонизируете сервер node.js , чтобы он мог работать даже после закрытия текущего сеанса?

Спасибо за вашу помощь

Ответы [ 8 ]

85 голосов
/ 05 февраля 2011

Навсегда - ответ на ваш вопрос.

Установка

$ curl https://npmjs.org/install.sh | sh
$ npm install forever
# Or to install as a terminal command everywhere:
$ npm install -g forever

Использование

Использование Forever из командной строки

$ forever start server.js

Использование экземпляра Forever из Node.js

var forever = require('forever');

  var child = new forever.Forever('your-filename.js', {
    max: 3,
    silent: true,
    args: []
  });

  child.on('exit', this.callback);
  child.start();
41 голосов
/ 31 августа 2012

Если вам нужно, чтобы ваш процесс демонизировался, а не передавался вечно - вы можете использовать модуль daemonize .

$ npm install daemonize2

Затем просто напишите файл сервера, как в примере:

var daemon = require("daemonize2").setup({
    main: "app.js",
    name: "sampleapp",
    pidfile: "sampleapp.pid"
});

switch (process.argv[2]) {

    case "start":
        daemon.start();
        break;

    case "stop":
        daemon.stop();
        break;

    default:
        console.log("Usage: [start|stop]");
}

Имейте в виду, это довольно низкоуровневый подход.

17 голосов
/ 09 июня 2013

ОБНОВЛЕНИЕ : я обновил и включил последние версии с pm2:

для многих случаев использования, использование службы systemd - самый простой и подходящий способ управления процессом узла.для тех, кто выполняет многочисленные процессы узлов или независимо запускает микросервисы узлов в одной среде, pm2 является более полнофункциональным инструментом.

https://github.com/unitech/pm2

http://pm2.io

  • он имеет действительно полезную функцию мониторинга -> симпатичный графический интерфейс для мониторинга нескольких процессов с помощью командной строки pm2 monit или списка процессов с pm2 list
  • организованным управлением журналом -> pm2 logs
  • другие вещи:
    • Конфигурация поведения
    • Поддержка карты источника
    • PaaS-совместимость
    • Watch & Reload
    • Модуль системы
    • Макс. Перезагрузка памяти
    • Режим кластера
    • Горячая перезагрузка
    • Рабочий процесс разработки
    • Сценарии запуска
    • Автоматическое завершение
    • Рабочий процесс развертывания
    • Мониторинг ключевых параметров
    • API
13 голосов
/ 09 февраля 2017

Чтобы запустить службу с помощью systemd, напишите файл службы.

Например, /etc/systemd/system/myservice.service

[Unit]
Description=myservice-description
After=network.target

[Service]
ExecStart=/opt/myservice-location/src/node/server.js --args=here
Restart=always
User=me
Group=group
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/opt/myservice-location

[Install]
WantedBy=multi-user.target

Не забудьте обновлять демон systemd после каждого изменения файла .service

$ systemctl daemon-reload

Затем запустите службу и включите службу при перезагрузке

$ systemctl start myservice
$ systemctl enable myservice
12 голосов
/ 14 февраля 2011

Самый простой подход - просто отправить команду в фоновый режим.

$ node server.js &

Тогда вы можете убить процесс позже. Я обычно делаю следующее:

$ killall node

Примечание : я использую OS X.

6 голосов
/ 11 февраля 2015

Вы можете попробовать:

$ nohup node server.js &

Это работает для меня на Mac и Linux.

Вывод будет в ./nohup.out файле

Но я все же рекомендую использовать pm2 или forever, потому что они легко используются для перезапуска, остановки и регистрации.

2 голосов
/ 03 октября 2011

Существуют более продвинутые бегуны общего назначения, такие как monit и runit.

0 голосов
/ 27 мая 2014

Чтобы узнать, как обычно работает демон в системе POSIX, вы можете найти метод C.

Я не видел достаточного количества методов в API node.js, чтобы можно было сделать это вручную C. Однако при использовании child_process вы можете сделать так, чтобы node.js сделал это для вас:

http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options

Я считаю это потенциальной тратой времени, потому что есть большая вероятность, что ваша система обеспечивает то же самое.

Например:

http://libslack.org/daemon/manpages/daemon.1.html

Если вы хотите что-то портативное (кроссплатформенное), другие посты предлагают решения, которых может быть достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...