簡體   English   中英

在節點窗口中重新啟動服務

[英]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本質上執行兩個步驟:

  1. 通過從winsw.exe復制來創建.exe文件,並在Windows注冊表中進行相應的輸入,因此Windows可以將該.exe識別為Windows服務。

  2. 使用傳遞到Service構造函數中的值來生成相同名稱的.xml文件。

這意味着,一旦.xml已經創建,適用於輸入的構造函數的任何更改將不被帶入.xml ,除非你做一個完整的重新安裝服務的[使用文件, svc.uninstall()然后是svc.install()

如果要動態更改輸入,但又不需要重新安裝,則應將這些值放在config.json ,然后僅試圖作為Windows服務托管的腳本中 require config.json

現在,如果您對config.json進行更改,則只需重新啟動服務即可反映該更改。

另外,如果你不想做手工重啟每次config.json變化,使用nodemonexecPath而不是node中傳遞給配置對象Service的構造。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM