Ответы:
Поздно к вечеринке, но окна узлов тоже подойдут.
Он также имеет встроенный системный журнал.
Есть 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
Я не обращаюсь к этому вопросу напрямую, но предлагаю альтернативу, которая также может удовлетворить ваши требования в стиле, более подходящем для node.js.
Функционально требования:
Эти требования могут быть выполнены с помощью диспетчера процессов (PM) и запуска диспетчера процессов при запуске системы. Два хороших PM, дружественных к Windows:
Чтобы PM запускался автоматически, самый простой способ - создать запланированную задачу с триггером «При запуске»:
pm2
пакетный сценарий при запуске, обязательно включите переменные среды, иначе он не сработает. Обсуждается здесь: github.com/Unitech/pm2/issues/1079
Менеджер процессов + планировщик задач подход я отправил год назад хорошо работает с какой - то один-офф установки службы. Но недавно я начал проектировать систему в стиле микросервисов, когда множество небольших сервисов общались друг с другом через 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>