Перезапуск сервиса в нод-окнах
Используя пакет node-windows, я устанавливаю сервер узла локально как сервис. Имея тогда интерфейс для изменения файла.env, когда я фактически изменяю конфигурации.env и сохраняю изменения, проблема заключается в том, что служба не перезапускается, как это должно быть, для подтверждения этих изменений. Кто-нибудь может подсказать мне, есть ли другой способ обработки перезапусков службы из этого пакета, или какие-либо другие способы обхода? Я на самом деле пытаюсь обработать перезапуск так:
const path = require("path");
let Service = require("node-windows").Service;
let EventLogger = require("node-windows").EventLogger;
const Messages= require("./models/messagesModel").getInstance();
let filePathServer = path.resolve(__dirname, "app.backend.js");
class ServiceInstall {
constructor(envConfig) {
this.log = new EventLogger(envConfig.SERVICE_NAME);
this.svc = new Service({
name: envConfig.SERVICE_NAME,
description: envConfig.SERVICE_DESCRIPTION,
script: filePathServer,
wait: envConfig.SERVICE_WAIT,
grow: envConfig.SERVICE_GROW
});
}
installWindowsService() {
// event handlers to install the service
}
restartWindowsService(){
this.svc.on("stop", () => {
this.log.info("Service " + this.svc.name + " stopped!");
Messages.info("Service " + this.svc.name + " stopped!");
});
this.svc.on("start", () => {
this.log.info("Service " + this.svc.name + " started!");
Messages.info("Service " + this.svc.name + " started!");
});
this.svc.restart();
}
}
module.exports = ServiceInstall;
1 ответ
В процессе установки node-windows
по сути выполняет два шага:
Создает
.exe
подать копиюwinsw.exe
и сделать соответствующую запись в реестре Windows, чтобы Windows могла распознать это.exe
в качестве службы Windows.Используйте значения, переданные в конструктор Service для генерации
.xml
файл с таким же именем.
Это означает, что когда-то .xml
любые изменения, которые применяются к входным данным функции конструктора, не будут перенесены в .xml
файл, если вы не выполните полную переустановку службы [используя svc.uninstall()
с последующим svc.install()
]
Если вы хотите динамически изменять входные данные, но без необходимости переустановки, вы должны поместить эти значения в config.json
а потом просто require
тот config.json
из сценария, который вы пытаетесь разместить в качестве службы Windows.
Теперь, если вы внесете изменения в config.json
вам просто нужно перезапустить сервис, чтобы отразить изменение.
Кроме того, если вы не хотите делать перезагрузку вручную каждый раз config.json
изменения, использовать nodemon
в execPath
вместо node
в объекте конфигурации передается Service
конструктор.