Я загрузил node.js исполняемый файл. Как запустить этот исполняемый файл в качестве службы Windows? Я не могу использовать стандартный установщик node.js, так как мне нужно одновременно запускать несколько версий node.js.
Как установить node.js в качестве службы Windows?
Ответ 1
Поздно к партии, но node-windows тоже сделает трюк.
Он также имеет встроенный системный журнал.
Существует 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: Я являюсь автором этого модуля.
Ответ 2
WinSer - это дружественная оболочка node.js вокруг популярного NSSM (Non-Sucking Service Manager)
Ответ 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>