私は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のサービス構成が間違っているかどうかはわかりません。
よろしくお願いします!