Как запустить узел.JS-сервер как демонический процесс?



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



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



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

505   8  

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

http://pm2.io

  • он имеет действительно полезную функцию мониторинга - > довольно " 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.out file

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

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

для фона на обычном пути к демонизации в системе 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

    Ничего не найдено.