Как установить node.js в качестве службы Windows?

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

8 ответов

Решение

Поздно к вечеринке, но нод-окна тоже сделают свое дело.

Он также имеет встроенную систему регистрации.

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

var Service = require('node-windows').Service;

// Create a new service object
var svc = new Service({
  name:'Hello World',
  description: 'The nodejs.org example web server.',
  script: 'C:\\path\\to\\helloworld.js'
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

svc.install();

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

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

Устанавливаем его:

npm install -g qckwinsvc

Установка вашего сервиса:

qckwinsvc

prompt: Service name: [name for your service]
prompt: Service description: [description for it]
prompt: Node script path: [path of your node script]
Service installed

Деинсталляция вашего сервиса:

qckwinsvc --uninstall

prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled

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

Из этого блога

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

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

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

nssm.exe install service_name c:\your_nodejs_directory\node.exe c:\your_application_directory\server.js
net start service_name

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

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

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

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

Для автоматического запуска PM самый простой способ - создать запланированное задание с триггером "При запуске":

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

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

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

      qckwinsvc2 install name="Hello" description="Hello World" path="C:\index.js" args="--y" now
      qckwinsvc2 uninstall name="Hello"
      qckwinsvc2 list

https://nssm.cc/ сервисный помощник, подходящий для создания службы Windows с помощью командного файла, который я использую из nssm, и хорошей работы для любого приложения и любого файла

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

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

serman install <path_to_config_file>

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

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

<service>
  <id>hello</id>
  <name>hello</name>
  <description>This service runs the hello application</description>

  <executable>node.exe</executable>

  <!-- 
       {{dir}} will be expanded to the containing directory of your 
       config file, which is normally where your executable locates 
   -->
  <arguments>"{{dir}}\hello.js"</arguments>

  <logmode>rotate</logmode>

  <!-- OPTIONAL FEATURE:
       NODE_ENV=production will be an environment variable 
       available to your application, but not visible outside 
       of your application
   -->
  <env name="NODE_ENV" value="production"/>

  <!-- OPTIONAL FEATURE:
       FOO_SERVICE_PORT=8989 will be persisted as an environment
       variable machine-wide.
   -->
  <persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>
Другие вопросы по тегам