"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 };