В Python Twisted у вас есть twistd
команда, которая помогает вам с рядом вещей, связанных с запуском вашего приложения (например, демонизировать его).
Как вы демонизируете сервер node.js, чтобы он мог работать даже после закрытия текущего сеанса?
Спасибо за вашу помощь
Ответы:
Forever - это ответ на ваш вопрос.
Установить
$ curl https://npmjs.org/install.sh | sh $ npm install forever # Or to install as a terminal command everywhere: $ npm install -g forever
Применение
Использование Forever из командной строки
Использование экземпляра 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();
источник
forever start server.js
в сценарий запуска (напримерrc.local
), если вы хотите, чтобы он пережил перезагрузки.Если вам нужно, чтобы ваш процесс демонизировал себя, а не ретранслировал его вечно, вы можете использовать модуль daemonize .
Затем просто напишите свой серверный файл, как в примере:
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]"); }
Имейте в виду, это довольно низкоуровневый подход.
источник
case 'restart': daemon.on('stopped', () => { daemon.start(); }); daemon.stop(); break;
Чтобы запустить
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.
Затем запустите службу и разрешите запуск службы при загрузке.
источник
ОБНОВЛЕНИЕ : я обновился, чтобы включить последнее от pm2:
во многих случаях использование службы systemd является самым простым и подходящим способом управления процессом узла. для тех, кто выполняет многочисленные процессы узлов или независимо выполняющие микросервисы узлов в единой среде, pm2 является более полнофункциональным инструментом.
https://github.com/unitech/pm2
http://pm2.io
pm2 monit
или списка процессов сpm2 list
pm2 logs
источник
Самый простой подход - просто отправить команду в фоновый режим.
Затем вы можете убить процесс позже. Обычно я делаю следующее:
Примечание : я использую OS X.
источник
/dev/null
должно быть включено в полное решение?Ты можешь попробовать:
У меня это работает на Mac и Linux.
Результат будет в
./nohup.out
файлеНо я все же рекомендую вам использовать
pm2
илиforever
, потому что их легко использовать для перезапуска, остановки и регистрации.источник
Есть более продвинутые бегуны общего назначения, такие как
monit
иrunit
.источник
Чтобы получить справочную информацию о обычном способе демонизации в системе 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
Если вам нужно что-то портативное (кроссплатформенное), другие сообщения предлагают решения, которых может хватить.
источник