Сервер node js как служба windows

Обновлено: 03.07.2024

Поскольку этот пост получил много внимания на протяжении многих лет, я перечислил верхние решения на платформу внизу этой публикации.

Оригинальный пост:

Я хочу, чтобы мой сервер node.js запускался в фоновом режиме, то есть: когда я закрываю терминал, я хочу, чтобы мой сервер продолжал работать. Я искал это и придумал этот учебник, однако он не работает должным образом. Поэтому вместо того, чтобы использовать этот демон script, я думал, что просто использовал перенаправление вывода (часть 2>&1 >> file ), но это тоже не выходит - я получаю пустую строку в моем терминале, например, ожидая вывода/ошибок.

Я также попытался поместить процесс в фоновом режиме, но как только я закрою терминал, процесс также будет убит.

Итак, как я могу оставить его включенным, когда я закрываю свой локальный компьютер?

Лучшие решения:

  • Systemd (Linux)
  • Launchd (Mac)
  • node -windows (Windows)
  • PM2 (Node.js)

ОТВЕТЫ

Ответ 1

2015: почти каждый дистрибутив Linux поставляется с systemd, что означает, что навсегда, monit и т.д. Больше не нужны - ваша ОС уже обрабатывает эти задачи.

Создайте файл myapp.service ( myapp.service заменив "myapp" на ваше имя приложения):

Скопируйте файл службы в систему /etc/systemd/system .

Запустите его с помощью systemctl start myapp .

Включите его для запуска при загрузке с помощью systemctl enable myapp .

Просмотреть журналы с помощью journalctl -u myapp

Это взято из того, как мы развертываем узловые приложения в версии Linux, 2018, в том числе команды для создания AWS/DigitalOcean/Azure CloudConfig для создания серверов Linux/node (включая файл .service ).

Ответ 2

Ответ 3

Оригинальный ответ

EDIT Я хотел добавить, что принятый ответ - действительно способ пойти. Я использую вечно на примерах, которые нужно не спать. Мне нравится npm install -g forever , поэтому он находится в пути node, а затем просто forever start server.js

Ответ 4

Это может быть не приемлемый способ, но я делаю это с экраном, особенно во время разработки, потому что я могу принести его обратно и дурачить его при необходимости.

Экран будет отсоединен и выйдет из системы. Затем вы можете вернуть его обратно на экран -r. Для получения более подробной информации см. Руководство по экрану. Вы можете назвать экраны и многое другое, если хотите.

Ответ 5

2016 Обновление: Серия node -windows/mac/linux использует общий API для всех операционных систем, поэтому это абсолютно подходящее решение. Однако; node -linux генерирует файлы инициализации systemv. Поскольку systemd продолжает расти в популярности, это реалистично лучший вариант для Linux. PR приветствуется, если кто-то хочет добавить поддержку systemd в node -linux: -)

Теперь это довольно старый поток, но node-windows предоставляет другой способ создания фоновых сервисов в Windows, Он основан на концепции nssm использования обертки exe вокруг вашего node script. Однако; вместо этого он использует winsw.exe и предоставляет настраиваемую оболочку node для более детального контроля за тем, как процесс запускается/останавливается при сбоях. Эти процессы доступны, как и любая другая служба:

enter image description here

Модуль также запекает некоторые регистрации событий:

enter image description here

Демонстрация вашего script осуществляется с помощью кода. Например:

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

Так как службы node -windows запускаются, как и любые другие, можно управлять/контролировать службу с помощью любого программного обеспечения, которое вы уже используете.

В полном раскрытии я являюсь автором этого модуля. Он был разработан для облегчения точной боли, которую испытывал ОП, но с более тесной интеграцией с функциональными возможностями, которые уже предоставляет операционная система. Я надеюсь, что будущие зрители с таким же вопросом найдут это полезным.

Ответ 6

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

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

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

Ответ 7

Если вы используете OSX, самый простой способ создать настоящий системный процесс - использовать launchd для его запуска.

Создайте такой plist и поместите его в /Library/LaunchDaemons с именем top-level-domain.your-domain.application.plist (вам нужно быть root при его размещении):

Когда это будет сделано, введите это (как root):

И вы все равно будете работать после перезагрузки.

Ответ 8

Я просто использую модуль daemon npm:

В последнее время я также использую mon (1) из TJ Holowaychuk, чтобы запускать и управлять простыми приложениями node.

Ответ 9

Я использую Supervisor для разработки. Это просто работает. Когда вы вносите изменения в файл .js, Supervisor автоматически перезапускает ваше приложение с внесенными изменениями.

sudo npm install supervisor -g

Вы можете легко заставить его смотреть другие расширения с -e. Другая используемая мною команда - -i игнорировать определенные папки.

Вы можете использовать nohup и supervisor, чтобы приложение node выполнялось в фоновом режиме даже после выхода из системы.

Ответ 10

  • >> означает добавление к app.log .
  • 2>&1 гарантирует, что ошибки также отправляются на stdout и добавляются к app.log .
  • Окончание & гарантирует, что ваш текущий терминал отключен от команды, чтобы продолжить работу.

Если вы хотите запустить сервер node (или что-то, что должно начаться при перезагрузке сервера), вы должны использовать systemd/systemctl.

Ответ 11

Node.js в качестве фоновой службы в WINDOWS XP

Создать c:\ node\helloworld.js

Откройте консоль команд и введите следующее (setx, только если установлен Resource Kit)

Отличный пакетный способ - создать c:\ node\ServiceMe.cmd

  • Теперь сами сервисы доступны через Start- > Run- > services.msc или через Start- > Run- > MSCONFIG- > Сервисы (и проверьте "Скрыть" Все службы Microsoft ").
  • script будет префикс каждого node, выполненного с помощью пакета script с node - '.
  • Кроме того, они могут быть найдены в реестре: " HKLM\SYSTEM\CurrentControlSet\Services\ node -xxxx"

Ответ 12

Принятый ответ, вероятно, является лучшим производственным ответом, но для быстрого взлома, выполняющего работу dev, я нашел это:

nodejs scriptname.js & не работал, потому что nodejs, казалось, сожрал &, и поэтому вещь не позволяла мне продолжать использовать терминал без скрипта. js dying.

Но я положил nodejs scriptname.js в .sh файл и nohup sh startscriptname.sh & работал.

Определенно, это не производственная штука, но она решает "Мне нужно продолжать использовать мой терминал и не пытаться запускать 5 разных терминалов".

Ответ 13

Попробуйте запустить эту команду, если вы используете nohup -

Вы также можете использовать навсегда, чтобы запустить сервер

PM2 также поддерживает npm start

Ответ 14

Если вы используете nodejs на сервере linux, я думаю, что это лучший способ.

Создайте сервис script и скопируйте в /etc/init/nodejs.conf

запуск службы: sudo service nodejs start

остановить службу: sudo service nodejs stop

Ответ 15

используйте nssm лучшее решение для Windows, просто скачайте nssm, откройте cmd в каталог nssm и введите

это установит новую службу Windows, которая будет указана в services.msc, после чего вы можете запустить или остановить службу, эта служба будет автоматически запущена, и вы сможете настроить ее перезагрузку, если она не удалась.

Ответ 16

Ответ 17

Июнь 2017 г. Обновление:
Решение для Linux: (Красная шляпа). Предыдущие комментарии не работают для меня. Это работает для меня на Amazon Web Service - Red Hat 7. Надеюсь, это работает для кого-то там.

Ответ 18

Посмотрите фугу! Помимо запуска многих рабочих, вы также можете демонизировать свой процесс node!

Ответ 19

кто-нибудь заметил тривиальное ошибочное положение "2 > & 1"?

Ответ 20

Я использую tmux для среды разработки с несколькими окнами/панелями на удаленных хостах. Очень просто отключить и сохранить процесс в фоновом режиме. Посмотрите tmux

Ответ 21

Этот ответ довольно поздний для партии, но я нашел, что лучшим решением было написать оболочку script, которая использовала команды screen -dmS и nohup .

Я также добавляю бит >> logfile в конец, поэтому я могу легко сохранить инструкции node console.log() .

Почему я использовал оболочку script? Я также добавил в оператор if, который проверял, был ли уже запущен процесс node myserver.js .

Таким образом, мне удалось создать один параметр командной строки, который позволяет мне сохранить сервер и перезапустить его, когда я внес изменения, что очень полезно для разработки.

Ответ 22

Ответ 23

Я удивлен, что никто не упомянул Guvnor

Я пробовал навсегда, pm2 и т.д. Но когда дело доходит до твердого контроля и метрики производительности на веб-сайте, я нашел Guvnor быть безусловно лучшим. Кроме того, он также полностью открыт.

введите описание изображения здесь

Изменить: Однако я не уверен, работает ли он в окнах. Я использовал его только в linux.

Ответ 24

Для людей, использующих более новые версии модуля daemon npm - вам нужно передавать файловые дескрипторы вместо строк:

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

Поздно к вечеринке, но окна узлов тоже подойдут.

введите описание изображения здесь

Он также имеет встроенный системный журнал.

введите описание изображения здесь

Есть API для создания скриптов из кода, т.е.

ФД: Я автор этого модуля.

второй, что "офигенно". Я просто следовал вашим инструкциям readme, и это сработало прямо из коробки - очень редко! только одно, что вы могли бы добавить в файл readme: как запустить созданный js-скрипт в интерфейсе командной строки: ie> node set_up_win_service.js . @Corey каким-либо образом я могу запустить пакет JXCore как службу с помощью этого модуля? @Madhur - Теоретически может сработать, но я нет и не планирую тестировать. node-windows использует файл wrapper.js, который отвечает за мониторинг / перезапуск. Это просто запускает скрипт узла как дочерний процесс. Также можно настроить путь к исполняемому файлу (т.е. jx вместо node). Итак, теоретически вы, вероятно, могли бы это сделать, но я понятия не имею, с какими причудами вы потенциально можете столкнуться. @Corey У меня есть простое приложение Http Node, но оно, похоже, не может работать с этой службой. Он устанавливается и запускается нормально, но немедленно останавливается. Любая помощь будет принята с благодарностью, сэр! Средство просмотра событий не показывает ошибок, но выдает предупреждение: Дочерний процесс [50732 - C: \ Program Files \ nodejs \ node.exe --harmony "C: \ Users \ bmechkov \ AppData \ Roaming \ npm \ node_modules \ node-windows \ lib \ wrapper.js "-f" C: \ dev \ Node \ abs_tips \ server.js "-l" NODE ABS TIPS "-g 0.25 -w 1 -r 3 -an] завершается с 0 @Mechkov - завершение с 0 означает успешный выход. Можете ли вы успешно запустить скрипт без окон узлов?

Я нашел эту вещь настолько полезной, что построил вокруг нее еще более простую в использовании оболочку ( npm , github ).

Установка вашей службы:

Удаление вашей службы:

Спасибо, очень просто !! quarky, у меня это работает (win 10 64 бит) «Npm ERR! asyncWrite не является функцией »« npm ERR! pna.nextTick - это не функция »

WinSer - это дружественная к node.js оболочка популярного NSSM (Non-Sucking Service Manager).

не нравится NSSM, потому что он предполагает, что это не всасывающий, потому что он обрабатывает сбой размещенного приложения, так что на самом деле это всасывающее приложение. Не люблю вообще обвинять Microsoft только потому, что это Microsoft. @FelicePollano NSSM предполагает, что он не является всасывающим, потому что он отслеживает размещенное приложение, в отличие от других решений, таких как srvany, которые оставляют службу в рабочем состоянии, даже если завернутый процесс умирает. @ JürgenSteinblock, это именно то, что я сказал: отстойное приложение, а не сам сервис-менеджер @FelicePollano - выход из размещенного приложения не означает ничего плохого. Дело в том, что NSSM отражает (или может отражать, если настроен правильно) реальное состояние службы, поэтому службу можно отслеживать, а не просто принимать рабочее состояние, как другие диспетчеры служб (как пользователь, я могу убить размещенный процесс, и srvary все равно будет показывать сервис в рабочем состоянии).

Затем я хотел разместить узел как службу, как IIS. Таким образом, он запускался с моей машиной, работал в фоновом режиме, автоматически перезапускался в случае сбоя и так далее.

Вот тут-то на сцену и выходит на сцену nssm , менеджер сервисов , не требующий всасывания. Этот инструмент позволяет размещать обычный EXE-файл в качестве службы Windows.

Вот команды, которые я использовал для настройки экземпляра приложения вашего узла в качестве службы, откройте ваш cmd как администратор и введите следующие команды:

Я не обращаюсь к этому вопросу напрямую, но предлагаю альтернативу, которая также может удовлетворить ваши требования в стиле, более подходящем для node.js.

  1. Пусть логика (приложение) работает в фоновом режиме
  2. Уметь запускать / останавливать логику
  3. Автоматически запускать логику при загрузке системы

Эти требования могут быть выполнены с помощью диспетчера процессов (PM) и запуска диспетчера процессов при запуске системы. Два хороших PM, дружественных к Windows:

Чтобы PM запускался автоматически, самый простой способ - создать запланированную задачу с триггером «При запуске»:

введите описание изображения здесь

Менеджер процессов + планировщик задач подход я отправил год назад хорошо работает с какой - то один-офф установки службы. Но недавно я начал проектировать систему в стиле микросервисов, когда множество небольших сервисов общались друг с другом через IPC. Так что вручную настраивать каждую службу стало невыносимо.

Чтобы установить службы без ручной настройки, я создал serman , инструмент командной строки (установка с помощью npm i -g serman ) для установки исполняемого файла как службы. Все, что вам нужно написать (и писать только один раз), - это простой файл конфигурации службы вместе с исполняемым файлом. Бегать

Рабочий файл конфигурации очень прост, как показано ниже. Но он также имеет много полезных функций, таких как <env> и <persistent_env> ниже.

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

Поздно к партии, но node-windows тоже сделает трюк.

Он также имеет встроенный системный журнал.

Существует API для создания скриптов из кода, т.е.

FD: Я являюсь автором этого модуля.

Работа в качестве службы

Далее, я хотел разместить node как службу, как и IIS. Таким образом, он запускается с моей машиной, запускается в фоновом режиме, автоматически перезапускается, если он сбой и т.д.

Здесь nssm, входящий в состав диспетчера служб, не входящий в систему. Этот инструмент позволяет вам размещать обычный .exe в качестве службы Windows.

Вот команды, которые я использовал для установки экземпляра вашего приложения node в качестве службы, откройте свой cmd-администратор и введите следующие команды:

Я нашел вещь настолько полезной, что я построил еще более удобную оболочку вокруг нее (npm, github).

Я не рассматриваю вопрос напрямую, но предоставляю альтернативу, которая также может удовлетворить ваши требования более чем способом node.js.

  • Попробуйте использовать логику (приложение) в фоновом режиме
  • Уметь запускать/останавливать логику
  • Автоматически запускать логику при загрузке системы

Эти требования могут быть удовлетворены с помощью диспетчера процессов (PM) и запуска запуска диспетчера процессов при запуске системы. Двумя хорошими PM, дружественными к Windows, являются:

Подход диспетчера процессов + планировщик задач, который я опубликовал год назад, хорошо работает с некоторыми одноразовыми сервисными установками. Но в последнее время я начал проектировать систему в режиме микро-сервиса, при этом многие небольшие службы разговаривали друг с другом через IPC. Поэтому ручная настройка каждой службы стала невыносимой.

установит службу. stdout и stderr записываются в журнал. Для получения дополнительной информации просмотрите веб-сайт .

Рабочий файл конфигурации очень прост, как показано ниже. Но у него также есть много полезных функций, таких как <env> и <persistent_env> ниже.

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

Поздно к вечеринке, но node-windows тоже подойдут.

enter image description here

Он также имеет встроенный системный журнал.

enter image description here

Есть API для создания скриптов из кода, т.е.

ФД: Я автор этого модуля.

Поскольку qckwinsvc некоторое время не обновлялся, появилась новая версия под названием qckwinsvc2 (npm, github)

Теперь он поддерживает аргументы, передаваемые в службу. Он также хранит локальный кеш, поэтому вам не нужно указывать путь каждый раз, когда вы хотите выполнить действие.

Используйте аргумент сейчас , чтобы запустить службу сразу после ее установки.

Метод диспетчер процессов + планировщик задач, который я опубликовал год назад, хорошо работает с некоторыми разовыми установками служб. Но недавно я начал проектировать систему в стиле микросервисов, когда множество небольших сервисов общались друг с другом через IPC. Так что вручную настраивать каждую службу стало невыносимо.

Чтобы установить службы без ручной настройки, я создал serman, инструмент командной строки (устанавливается с помощью npm i -g serman ), чтобы установить исполняемый файл как службу. Все, что вам нужно написать (и записать только один раз), - это простой файл конфигурации службы вместе с исполняемым файлом. Запустить

Установит сервис. stdout и stderr все регистрируются. Для получения дополнительной информации посетите веб-сайт проекта.

Рабочий файл конфигурации очень прост, как показано ниже. Но у него также есть много полезных функций, таких как <env> и <persistent_env> ниже.

Затем я хотел разместить узел как службу, как IIS. Таким образом, он запускался вместе с моей машиной, работал в фоновом режиме, автоматически перезапускался в случае сбоя и так далее.

Именно здесь nssm, не требующий отсасывания сервис-менеджер, входит в картина. Этот инструмент позволяет размещать обычный EXE-файл в качестве службы Windows.

Вот команды, которые я использовал для настройки экземпляра приложения вашего узла в качестве службы, откройте ваш cmd как администратор и введите следующие команды:

Я не обращаюсь к этому вопросу напрямую, но предлагаю альтернативу, которая также может удовлетворить ваши требования в стиле, более подходящем для node.js.

Функционально требования следующие:

  1. Пусть логика (приложение) работает в фоновом режиме
  2. Уметь запускать / останавливать логику
  3. Автоматически запускать логику при загрузке системы

Эти требования могут быть выполнены с помощью диспетчера процессов (PM) и запуска диспетчера процессов при запуске системы. Два хороших PM, дружественных к Windows:

Чтобы PM запускался автоматически, самый простой способ - создать запланированную задачу с триггером «При запуске»:

Читайте также: