使用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;
在安装过程中,node-windows
基本上执行两个步骤:
-
通过从
winsw.exe
创建副本来创建.exe
文件,并在 Windows 注册表中创建相应的条目,以便 Windows 可以将此.exe
识别为 Windows 服务。 -
使用传递到服务构造函数的值生成同名的
.xml
文件。
这意味着一旦创建了.xml
,应用于构造函数输入的任何更改都不会传递到.xml
文件中,除非您完全重新安装服务 [使用svc.uninstall()
后跟svc.install()
]
如果要动态更改输入,但不需要重新安装,则应将这些值放在config.json
中,然后只需从尝试作为 Windows 服务托管的脚本中require
该config.json
。
现在,如果对config.json
进行更改,则只需重新启动服务即可反映更改。
此外,如果不想每次config.json
更改时都手动重新启动,请在execPath
中使用nodemon
,而不是在传递给Service
构造函数的配置对象中使用node
。