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

时间:2014-10-13 16:17:37

标签: javascript linux node.js deb

我不是Linux专家,很抱歉,如果我的术语不是100%正确的话。我有一个运行Debian的嵌入式设备。设备运行Node.js网络服务器。此Node.js应用程序与Node可执行文件捆绑在一起,并打包为 .deb文件。该包通过包含init.d脚本来定义服务(守护进程?)。因此,为了更新应用程序,我只需输入" dpkg -i my-service.deb"。 Node.js应用程序可以上传debian软件包( .deb)并将它们存储在临时文件夹中。

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

...如果我调用child_process.exec(" dpkg -i new-version-of-my-service.deb")它首先停止服务,然后没有任何反应。

1 个答案:

答案 0 :(得分:0)

以下是问题的解决方法:

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进程仍会运行。