Перезапуск сервиса в нод-окнах - PullRequest
0 голосов
/ 16 мая 2018

Используя пакет 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 Ответ

0 голосов
/ 23 июня 2018

Во время процесса установки node-windows, по существу, выполняет два шага:

  1. Создает файл .exe, делая копию из winsw.exe и делая соответствующую запись в реестре Windows,поэтому Windows может распознавать это .exe как службу Windows.

  2. Использовать значения, переданные в конструктор службы, для создания файла .xml с тем же именем.

Это означает, что после создания .xml любые изменения, относящиеся к входным данным функции конструктора, не будут перенесены в файл .xml, если вы не выполните полную переустановкуслужба [с использованием svc.uninstall(), за которой следует svc.install()]

Если вы хотите динамически изменять входы, но без необходимости переустановки, вы должны поместить эти значения в config.json, а затем просто requireчто config.json из сценария вы пытаетесь разместить в качестве службы Windows.

Теперь, если вы вносите изменение в config.json, вам просто нужно перезапустить службу, чтобы отобразитьизменение.

Кроме того, если вы не хотите вручную перезапускать каждый раз при config.json изменениях, используйте nodemon в execPath вместо node в объекте конфигурации, переданном конструктору Service.

...