Как установить 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
Я не обращаюсь непосредственно к этому вопросу, но предоставляю альтернативу, которая также могла бы удовлетворить ваши требования более нодным способом.
Функционально требования следующие:
- Пусть логика (приложение) работает в фоновом режиме
- Уметь запускать / останавливать логику
- Автоматически запускать логику при загрузке системы
Этим требованиям можно удовлетворить, используя диспетчер процессов (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>