Як встановити node.js як сервіс Windows?


130

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

Відповіді:


187

Пізно на вечірку, але вікна з вузлами теж зроблять трюк.

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

Також вбудований системний журнал.

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

Існує 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();

Ф.Д .: Я автор цього модуля.


3
друге, що "дивовижно". Я тільки дотримувався ваших інструкцій readme, і це спрацювало прямо з коробки - дуже рідко! лише одне, що ви можете додати до readme: як запустити створений скрипт js у CLI: тобто> вузол set_up_win_service.js ...
Майк-гризун

@Якщо я можу запустити пакет JXCore як послугу за допомогою цього модуля?
Мадхур

@Madhur - Теоретично це може працювати, але я цього не маю і не планую тестувати. node-windows використовує файл wrapper.js, який відповідає за моніторинг / перезапуск. Це просто запускає сценарій вузла як дочірній процес. Також можливо налаштувати виконуваний шлях (тобто jx замість вузла). Отже, теоретично, ви могли, напевно, це зробити, але я не маю уявлення про те, до яких вигадок ви могли б зіткнутися.
Corey

@Corey У мене є проста програма Http Node, але, здається, не можна працювати за допомогою цієї послуги. Він встановлюється і запускається добре, але зупиняється негайно. Будь-яка допомога буде дуже вдячна, сер! Переглядач подій не показує помилок, але попередження: Дочірній процес [50732 - C: \ програмні файли \ nodejs \ node.exe --гармонія "C: \ Користувачі \ bmechkov \ AppData \ Роумінг \ npm \ node_modules \ node-windows \ lib \ wrapper.js "-f" C: \ dev \ Node \ abs_tips \ server.js "-l" NODE ABS TIPS "-g 0,25 -w 1 -r 3 -an] припинено з 0
Мечков

@Mechkov - Закінчення з 0 означає успішний вихід. Чи можете ви успішно запустити скрипт без вузлів Windows?
Корі

40

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

Дякую, дуже просто !! химерний, він працює для мене (виграй 10 64 біт)
Фуркан

"Помилка npm! asyncWrite не є функцією "" npm ERR! pna.nextTick не є функцією »
Timwi

Дякую, це дуже просто у використанні.
Енріке Флорес

27

WinSer - це дружня обгортка node.js навколо популярного NSSM (менеджера послуг, що не висмоктує)


не подобається NSSM, тому що він припускає, що це не відсмоктування, оскільки він обробляє збій розміщеної програми, тому насправді це відсмоктування розміщеної програми. Не люблю в цілому звинувачувати Microsoft лише тому, що це Microsoft.
Felice Pollano

2
@FelicePollano NSSM припускає, що це Non-Sucking, оскільки він контролює розміщену програму, на відміну від інших рішень, таких як srvany, які залишають службу в робочому стані, навіть якщо завершений процес загине.
Юрген Штейнблок

@ JürgenSteinblock - це саме те, що я сказав: чи смоктається розміщена програма, а не сам менеджер сервісів
Феліче Поллано

2
@FelicePollano вихід із розміщеної програми не означає, що це щось погано. Справа в тому, що NSSM відображає (або може відображати, якщо налаштовано належним чином) реальний стан служби, тому службу можна контролювати, а не просто припускати стан, що працює, як і інші менеджери сервісів (як користувач я вбиваю розміщений процес, і srvary все одно показуватиме послуга в робочому стані).
Юрген Штейнблок

16

З цього блогу

Далі я хотів розмістити вузол як службу, як і 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

14

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

Функціонально такі вимоги:

  1. Нехай логіка (додаток) працює у фоновому режимі
  2. Вміти запускати / зупиняти логіку
  3. Автоматично запускайте логіку, коли система завантажується

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

Для автоматичного запуску ПМ найпростішим способом є створення запланованого завдання за допомогою тригера "При запуску":

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


Якщо ви спробуєте почати pm2використовувати пакетний скрипт при запуску, обов'язково включіть змінні середовища, інакше це не вийде. Тут обговорювались: github.com/Unitech/pm2/isissue/1079
парі

@steampowered як дати шлях до PM2_Home?
charan tej

0

Підхід менеджера процесів + планувальник завдань, який я опублікував рік тому, добре працює з деякими разовими сервісними установками. Але нещодавно я почав проектувати систему в мікро-сервісі, і багато дрібних сервісів розмовляли між собою через 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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.