NodeJS child_process.spawn() 在 Debian 10 上作为 systemd 服务运行时表现不同

NodeJS child_process.spawn() 在 Debian 10 上作为 systemd 服务运行时表现不同

我正在开发一个 NodeJS 应用程序,它运行 expressJS 并使用 twinkle 拨打电话号码。

给定以下函数:

export const call = (telNr: string, res: Response|undefined = undefined) => {
    const endOfLine = require("os").EOL;
    const process = spawn("/usr/bin/twinkle", ["-c"], {shell: true});
    let registered = false;
    process.stdout.on("data", (data) => {
        if (/registration succeeded/.test(data.toString())) {
            if (!registered) {
                registered = true;
                process.stdin.write("call " + telNr + endOfLine);
                setTimeout(() => {
                    try {
                        process.stdin.write("bye" + endOfLine);
                        process.stdin.write("exit" + endOfLine);
                    } catch {
                        // War schon zu
                    }
                }, 10000);
            } // Else -> Scheint das zweite mal ausgegeben zu werden.
        }

        if (/486 Busy here/.test(data.toString())) {
            // Belegt
            process.stdin.write("exit" + endOfLine);
        }
    });

    process.on("exit", (exit) => {
        if (res !== undefined) {
            res.json({code: exit});
        }
    });
};

该函数用于通过 url 调用进行调试(这就是为什么有可选的res- 参数。

现在解决问题

当我使用 root 身份启动应用程序node index.js并打开给定的 URL 时,所需的 SIP 电话会响铃 10 秒。

当应用程序通过 systemd 作为服务启动时,子进程会立即关闭,退出代码为 134。

系统单元:

[Unit]
Description=Besuchermanagement Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node /srv/node/besuchermanagement/dist/index.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

我希望这不是题外话,因为我不确定这个问题是否与我的代码有关,或者是我在 systemd 中的服务配置错误。

提前致谢!

相关内容