繁体   English   中英

如何从服务本身安装linux服务?

[英]How can I install a linux service from the service itself?

我不是Linux方面的专家,如果我的术语不是100%正确,请对不起。 我有一个运行Debian的嵌入式设备。 设备运行Node.js Web服务器。 该Node.js应用程序与Node可执行文件捆绑在一起,并打包为.deb文件。 该软件包通过包含init.d脚本来定义服务(守护程序?)。 因此,为了更新应用程序,我只需要键入“ dpkg -i my-service.deb”。 Node.js应用程序可以上传debian软件包( .deb)并将其存储在temp文件夹中。

问题:如何从节点应用程序本身内部更新服务(节点可执行文件+节点应用程序)?

...如果我调用child_process.exec(“ dpkg -i new-version-of-my-service.deb”),它将首先停止该服务,然后什么也没有发生。

解决问题的方法如下:

function update_self(deb_package_filename) {
    var fileToInstall = path.join(upload_dir, deb_package_filename);
    var out = fs.openSync(path.join(upload_dir, 'out.log'), 'a');
    var err = fs.openSync(path.join(upload_dir, 'out.log'), 'a');
    var child = spawn("dpkg", ["-i", fileToInstall], {
        cwd: upload_dir,               // working directory
        detached: true,                // detach from the parent process group
        stdio: [ 'ignore', out, err ]
    });
    child.unref();
}

子进程与调用者分离,因此即使父进程被杀死,dpkg进程仍会运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM