Debian 10에서 systemd 서비스로 실행될 때 NodeJS child_process.spawn()이 다르게 동작합니다.

Debian 10에서 systemd 서비스로 실행될 때 NodeJS child_process.spawn()이 다르게 동작합니다.

저는 expressJS를 실행하고 Twinkle을 사용하여 전화번호로 전화를 거는 NodeJS 애플리케이션을 개발 중입니다.

다음 함수가 주어지면:

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- 매개변수가 있습니다.

지금 문제를 해결하세요

루트로 애플리케이션을 실행 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의 서비스 구성이 잘못되었는지 확실하지 않으므로 이것이 주제에서 벗어나지 않기를 바랍니다.

미리 감사드립니다!

관련 정보