Как запустить сервер node.js в качестве процесса демона?
В Python Twisted у вас есть команда twistd
, которая помогает вам с рядом вещей, связанных с запуском приложения (например, demononize).
Как вы демонизируете сервер node.js, чтобы он мог запускаться даже после закрытия текущего сеанса?
Спасибо за помощь
Ответы
Ответ 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
Если вам требуется что-то портативное (кросс-платформа), другие сообщения предлагают решения, которые могут быть достаточными.