Подтвердить что ты не робот

Как запустить сервер node.js в качестве процесса демона?

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

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

Спасибо за помощь

4b9b3361

Ответ 1

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

Установить

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

Usage

UsageИспользование 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();

Ответ 2

Если вам нужен ваш процесс для демонализации самого себя, а не для ретрансляции навсегда - вы можете использовать модуль 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]");
}

Имейте в виду, что это подход с низким уровнем.

Ответ 3

UPDATE: я обновлен, чтобы включить последнее из pm2:

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

https://github.com/unitech/pm2

http://pm2.io

  • у него есть действительно полезная функция мониторинга → довольно "gui" для мониторинга командной строки нескольких процессов с помощью pm2 monit или списка процессов с помощью pm2 list
  • организованное управление журналом → pm2 logs
  • другие вещи:
    • Конфигурация поведения
    • Поддержка исходной карты.
    • Совместимость с PaaS
    • Смотреть и перезагружать
    • Модульная система
    • Максимальная перезагрузка памяти
    • Режим кластеров
    • Горячая перезагрузка
    • Рабочий процесс разработки
    • Скрипты запуска
    • Автозаполнение
    • Рабочий процесс развертывания
    • Контроль ключевых показателей
    • API

Ответ 4

Для запуска демона менеджера сервисов 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

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

$ systemctl daemon-reload

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

$ systemctl start myservice
$ systemctl enable myservice

Ответ 5

Самый простой способ - просто отправить команду на задний план.

$ node server.js &

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

$ killall node

Примечание. Я запускаю OS X.

Ответ 6

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

$ nohup node server.js &

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

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

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

Ответ 7

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

Ответ 8

Для фона обычного способа демонстрации в системе POSIX вы можете выполнить поиск метода C.

Я не видел достаточных методов в API node.js, чтобы это можно было сделать вручную. Однако при использовании 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

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