Відповіді:
Пізно на вечірку, але вікна з вузлами теж зроблять трюк.
Також вбудований системний журнал.
Існує 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 - встановити
prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled
WinSer - це дружня обгортка node.js навколо популярного NSSM (менеджера послуг, що не висмоктує)
Далі я хотів розмістити вузол як службу, як і 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, це:
Для автоматичного запуску ПМ найпростішим способом є створення запланованого завдання за допомогою тригера "При запуску":
pm2
використовувати пакетний скрипт при запуску, обов'язково включіть змінні середовища, інакше це не вийде. Тут обговорювались: github.com/Unitech/pm2/isissue/1079
Підхід менеджера процесів + планувальник завдань, який я опублікував рік тому, добре працює з деякими разовими сервісними установками. Але нещодавно я почав проектувати систему в мікро-сервісі, і багато дрібних сервісів розмовляли між собою через IPC. Тож налаштування кожної служби вручну стала нестерпною.
З метою встановлення сервісів без конфігурації вручну я створив серман , інструмент командного рядка (встановити за допомогою 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>