Как запустить узел.JS-сервер как демонический процесс?
в Python Twisted, у вас есть twistd команда, которая поможет вам с рядом вещей, связанных с запуском вашего приложения (демонизировать его, например).
Как вы демонизируете a узел.js сервер, чтобы он мог работать даже после закрытия текущего сеанса?
Спасибо за помощь
8 ответов:
навсегда это ответ на ваш вопрос.
установить
$ 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 from 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();
Если вам нужно, чтобы ваш процесс демонизировать себя, а не ретранслировать навсегда - вы можете использовать демонизации модуль.
$ 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]"); }имейте в виду, что это довольно низкоуровневый подход.
обновление: Я обновлен, чтобы включить последний из pm2:
для многих случаев использования использование службы systemd является самым простым и наиболее подходящим способом управления процессом узла. для тех, кто работает с многочисленными узловыми процессами или независимо работающими узловыми микросервисами в одной среде, pm2 является более полнофункциональным инструмент.
https://github.com/unitech/pm2
- он имеет действительно полезную функцию мониторинга - > довольно " gui " для мониторинга командной строки нескольких процессов с
pm2 monitили список процессов сpm2 list- организация управления - > журнал
pm2 logs- другие вещи:
- настройки поведения
- поддержка исходной карты
- PaaS Совместимый
- Часы И Перезагрузки
- Система Модуль
- максимальная перезагрузка памяти
- Режим Кластера
- горячий перезагрузка
- процесс разработки
- Скрипты
- автозавершение
- рабочий процесс развертывания
- мониторинг Keymetrics
- API
самый простой подход - просто отправить команду в фоновом режиме.
$ node server.js &тогда вы можете убить процесс в более позднее время. Я обычно делаю следующее:
$ killall nodeПримечание: я запускаю OS X.
запустить службу с помощью
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 после каждого изменения .служебный файл
$ systemctl daemon-reloadзатем запустите службу с помощью и включите службу для запуска при перезагрузке
$ systemctl start myservice $ systemctl enable myservice
можно попробовать:
$ nohup node server.js &Он работает для меня на Mac и Linux.
вывод будет в
./nohup.outfileно я все же рекомендую вам использовать
pm2илиforever, потому что они легко используются для перезапуска, остановки и ведения журнала.
для фона на обычном пути к демонизации в системе POSIX вы можете искать метод C.
Я не видел достаточно методов в узел.JS API, чтобы это можно было сделать c-способом вручную. Однако при использовании child_process вы можете иметь узел.js сделать это для вас:
http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
Я считаю это потенциальной тратой времени, потому что есть хороший шанс, что ваша система обеспечивает такую же.
например:
http://libslack.org/daemon/manpages/daemon.1.html
Если вы хотите что-то портативное (кросс-платформенное), другие сообщения предлагают решения, которые могут быть достаточными.
Comments