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

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

Ответ 1

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

enter image description here

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

enter image description here

Существует 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();

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

Ответ 3

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

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

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

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

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

Ответ 4

Я нашел вещь настолько полезной, что я построил еще более удобную оболочку вокруг нее (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

Ответ 5

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

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

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

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

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

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

Ответ 6

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