ken_nogi/dbbackup/lib/serviceControl.js
Kenichiro NOGI 67cc3da6c8 up
2026-07-13 19:02:04 +09:00

48 lines
1.5 KiB
JavaScript

"use strict";
/*
* systemdサービスの停止・起動・状態確認。restore.js がリストア前後に
* Webサービス(既定 pleasanter)を安全に止める/戻すために使用する。
*/
const { spawn } = require("child_process");
function runSystemctl(args) {
return new Promise((resolve, reject) => {
const child = spawn("systemctl", args, { stdio: ["ignore", "pipe", "pipe"] });
let stdout = "";
let stderr = "";
child.stdout.on("data", (d) => (stdout += d.toString("utf8")));
child.stderr.on("data", (d) => (stderr += d.toString("utf8")));
child.on("error", (err) => reject(new Error(`systemctl起動失敗: ${err.message}`)));
child.on("close", (code) => {
if (code !== 0) {
reject(new Error(`systemctl ${args.join(" ")} 異常終了 (code=${code}): ${(stderr || stdout).trim()}`));
return;
}
resolve({ stdout: stdout.trim(), stderr: stderr.trim() });
});
});
}
async function isServiceActive(serviceName) {
try {
const { stdout } = await runSystemctl(["is-active", serviceName]);
return stdout === "active";
} catch (_err) {
return false;
}
}
async function stopService(serviceName) {
await runSystemctl(["stop", serviceName]);
}
async function startService(serviceName) {
await runSystemctl(["start", serviceName]);
}
module.exports = { isServiceActive, stopService, startService };