Pm2-windows-service

День добрый,
Народ кто пользовался ( или в курсе) данном сервисом для перезапуска nodejs сервера — pm2 для windows
pm2-windows-service - npm.

Если после запуска

pm2 start index.js
выполнить команду

pm2 save
То все нормально, перезагружаем железо - pm2 запускает index.js

Но если установить сервис

pm2-service-install [-n ]

то pm2 не работает,

events.js:182
throw er; // Unhandled ‘error’ event
^
Error: connect EPERM //./pipe/rpc.sock

После удаления сервиса pm2-service-uninstall все нормально
НО зачем и что делает эта команда pm2-service-install ? Пытается запустить pm2-windows-service - как службу (сервис) windows ?

Получается что достаточно после запуска pm2 нужного скрипта
pm2 save

Что конкретно делает эта команда pm2-service-install ?? , если после перезагрузки сервера скрипт стартует в pm2 и после команды pm2 save

Сам пользуюсь pm2 под linux и macos. Автостарт настроил через pm2 startup http://pm2.keymetrics.io/docs/usage/startup/.

Конкретно с твоей проблемой не сталкивался. При этом вижу целую секцию возможных нюансав при запуске pm2 как сервиса винды.

Посмотри эту доку: тебе нужна переменная окружения PM2_HOME, нужно использовать одинаковые системные аккаунты как для запуска сервиса, так и для использования pm2, и целая пачка других нюансов.

Примечание конечно читал на https://www.npmjs.com/package/pm2-windows-service#caveats,
но pm2 и pm2-windows-service запущены под одним пользователем, админом

Что должна делать эта команда

pm2-service-install [-n ]

Это дополнительные настройки какие то, или обязательная вещь ?
Повторюсь но после
pm2 start myserver.js
pm2 save
//как написано в Quickstart
//After reading the caveats section, use PM2 to start the set of processes that you want the service to restore, and then //just do: pm2 save
Сервер nodejs после перезагрузки железа стартует …

Почитал исходники чтобы разобраться.

Команда устанавливает свой скрипт как windows service, и тут же запускает его. Вот тут https://github.com/jon-hall/pm2-windows-service/blob/master/src/install.js#L53

Код этого скрипта тут https://github.com/jon-hall/pm2-windows-service/blob/master/src/service.js. Скрипт подтягивает конфигурацию (сохраненную с помощью pm2 save) приложений и стартует их с запуская pm2.

Следовательно эта вещь обязательная если ты хочешь чтобы твои приложения стартовали после перезагрузки.


По поводу изначальной проблемы:

Наверное ты установил сервис из-под админа, а запускаешь pm2 из-под пользователя? Тогда ошибку можно объяснить тем что ползователю недостаточно прав чтобы работать с pm2 файлом rpc.sock. Попробуй запустить pm2 из-под админа после запуска pm2 сервиса.

Нет сервис из под админа (при install было много консольных UAC) и установка пользователь pm2 админ.
Но возможно это разные админы, так как комп в домене (но возможно это и не причем) . И есть два админа.
Но в учетку другого админа конечно не переходил.

В том то и странность что после стандартного запуска
pm2 start myserver.js
если сделать
pm2 save
После перезагрузки диспетчере висит два nodejs процесса

Quickstart
After reading the caveats section, use PM2 to start the set of processes that you want the service to restore, and then just do:
pm2 save
The service will then restart that set of processes when the service is next started (by default this will be on system boot).

???

Моя идея в том что у пользователя, который запускает pm2 может не быть прав на чтение файла, созданного window service. Что именно к этом привело угадать не смогу. Это только тебе проверить это на своей машине.

Еще вариант - посмотри сколько на самом деле зарегано window services. Может зарегистрировано 2 штуки.

2 процесса это может быть нормально. Один - регистированный сервис, второй - это твое приложение, запущенное первым.

Не понятно что тебе тут не понятно. Механика pm2 такая: ты запустил с его помощью несколько процессов, потом “запомнил” эти процессы с помощью pm2 save. pm2 записал этот факт в конфигурационном файле. pm2-service-install регистрирует windows service, который смотрит файл конфигурации и запускает соответствующие процессы. Ну а чтобы все работало, нужно прочитать и сконфигурировать по “caveats section”.

Запустил другой (второй) server.js
pm2 start server.js
pm2 save
Теперь после перезагрузки три процесса

pm2 list что показывает до и после перезагрузки? Должен показать список твоих процессов.

Вижу что все логично: один это pm2 процесс, два - это твои процессы.

Спасибо, за развернутый ответ
Но все таки, pm2 save - это команда pm2-windows-service
Если после pm2 происходит только запись в конфигурационный файл, ничего не должно само запускаться ?

Но без команды pm2-service-install [-n ] запускается, многократно проверял после перезагрузки.
Хм…

Да pm2 list показывает что процессы (оба) запущены.
В диспетчере три pm2 + 2 моих (которые после перезагрузки ) сами запускаются если pm2 save

То есть без pm2-service-install [-n ] процессы перезапускаются, но
их нельзя (или не видно) как убрать из автозагрузки (если это будет нужно конечно)

Это точно команда pm2 самого. Результаты ее работы используются сервисом, который регистритует pm2-service-install: https://github.com/jon-hall/pm2-windows-service/blob/master/src/service.js#L7

Верно. Может быть следующее:

  1. pm2-service-install - пятое колесо: в самом pm2 есть функционал автостарта под windows.
  2. Возможно остался зарегистрированный сервис после запуска pm2-service-install, который не вычистился. 100% уверен в винде есть инструмент чтобы посмотреть существующие сервисы.

Убрать из автозагрузки можно через правку конфига pm2

pm2 stop [id|name|all|json|stdin]
pm2 save 
1 лайк

Практически ты прав, кроме pm2-windows-service, стоял еще другой “стартер” pm2-windows-startup
поэтому после
pm2 save
скрипты и стартовали - работал pm2-windows-startup

После
pm2 stop [id|name|all|json|stdin]
pm2 save
автозагрузки скриптов прекратились

Удалил pm2-windows-service и pm2-windows-startup, но теперь при загрузке такое
сообщение

Windows Script Host
Не удается найти файл сценария
“C:\Users\nameuser\AppData\Roaming\npm\node_modules\pm2-windows-startup\invisible.vbs”

То есть что то осталось.
Можно ли это что то найти ?
И кто ищет - это файл сценария ?

Ситуация выглядит так что остался зарегистрированный сервис от pm2-windows-startup модуля и тебе надо удалить этот сервис.

Да, тебе нужно найти виндовый диалог, который показывает список зарегистрированных сервисов. В этом списке будет сервис который запускает C:\Users\nameuser\AppData\Roaming\npm\node_modules\pm2-windows-startup\invisible.vbs файл.

На всякий случай уточняю, пакет ранее был удален npm uninstall -g pm2-windows-startup
В директории …AppData\Roaming\npm\node-modules\ - только pm2

Как найти этот виндовый диалог ?
Гугол выдает похожий вопрос сылка
И там упоминается команда

pm2-startup uninstall

удаление того что есть в старте pm2
Как понимаю pm2, что то себе записало …

Если честно то я Вас не понял,
в службах посмотрел там нет службы которая ждет запуска pm2-windows-startup.
Сама винда где то хранит запись о файле …pm2-windows-startup\invisible.vbs ?

pm2-windows-startup не до конца удалился ?

удалял стандартно

npm uninstall pm2-windows-startup -g

Да. Эту запись сделал пакет pm2-windows-startup при своей установке.


Я поленился тогда читать исходники. Прочел сейчас.

как работает pm2-windows-startup
Он регистрирует с помощью этой команды другого пакета https://github.com/marklagendijk/node-start-on-windows-boot/blob/master/index.js#L3 скрипт в window регистре - вот такую команду https://github.com/marklagendijk/node-pm2-windows-startup/blob/master/index.js#L13. Отсюда следствие - удаление pm2-windows-startup не приводит к удалению зарегистрированного скрипта.

У самого пакета есть механизм убирания скрипта из автостарта - это команда uninstall https://github.com/marklagendijk/node-pm2-windows-startup/blob/master/index.js#L20.

Тебе нужно установить пакет node-pm2-windows-startup и выполнить команду pm2-startup uninstall, потом удалить пакет node-pm2-windows-startup. Это уберет проблему

Привет,
уточняю
ты имел ввиду установить заново pm2-windows-startup
То есть

npm install pm2-windows-startup -g
pm2-startup install
без pm2 save

а потом
pm2-startup uninstall
и
npm uninstall pm2-windows-startup -g

Я имел в виду такую последовательность:

npm install pm2-windows-startup -g
pm2-startup uninstall
npm uninstall pm2-windows-startup -g
1 лайк

да, это сработало