![](/img/trans.png)
[英]Package Node.js app which runs as a service using node-windows
[英]Restarting a service in node-windows
使用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服務。
使用傳遞到Service構造函數中的值來生成相同名稱的.xml
文件。
這意味着,一旦.xml
已經創建,適用於輸入的構造函數的任何更改將不被帶入.xml
,除非你做一個完整的重新安裝服務的[使用文件, svc.uninstall()
然后是svc.install()
如果要動態更改輸入,但又不需要重新安裝,則應將這些值放在config.json
,然后僅在試圖作為Windows服務托管的腳本中 require
config.json
。
現在,如果您對config.json
進行更改,則只需重新啟動服務即可反映該更改。
另外,如果你不想做手工重啟每次config.json
變化,使用nodemon
在execPath
而不是node
中傳遞給配置對象Service
的構造。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.