fix: 修复systemd socket协议、格式化代码、拆分配置常量

This commit is contained in:
2026-06-08 10:30:38 +08:00
parent c99188ef78
commit 3f7ebfb52e
4 changed files with 106 additions and 99 deletions
+35 -37
View File
@@ -77,48 +77,46 @@ class MethodExecutor
@@rst_counter += 1
unless Process.euid == 0
self.record("error", "reset", "Permission denied: root required to manage systemd services.")
raise Errno::EPERM
end
unless Process.euid == 0
self.record("error", "reset", "Permission denied: root required to manage systemd services.")
raise Errno::EPERM
end
self.record("info", "reset", "Spawning 'systemctl restart minecraft' (PID will be captured)...")
pid = spawn "systemctl restart minecraft"
self.record("debug", "reset", "systemctl restart spawned with PID #{pid}.")
tick_beg = Time.now
self.record("info", "reset", "Spawning 'systemctl restart minecraft' (PID will be captured)...")
pid = spawn "systemctl restart minecraft"
self.record("debug", "reset", "systemctl restart spawned with PID #{pid}.")
tick_beg = Time.now
while true
sleep 0.5
begin
SystemdNotifier.notify("WATCHDOG=1")
proc_status = Process.waitpid2(pid, Process::WNOHANG)
if proc_status # 子进程已退出,返回 [pid, status]
_, status = proc_status
elapsed = (Time.now - tick_beg).round(2)
if status.success?
self.record("info", "reset", "'systemctl restart' succeeded in #{elapsed}s.")
@@rst_counter = 0 # 成功时重置计数器
break
else
self.record("error", "reset", "'systemctl restart' failed with exitcode #{status.exitstatus} after #{elapsed}s.")
break
end
else # 子进程仍在运行 (WNOHANG 返回 nil)
if Time.now - tick_beg > PERSISTENCE_PERIOD then
self.record("warn", "reset",
"'systemctl restart' timed out after #{PERSISTENCE_PERIOD}s. Force-killing PID #{pid}...")
system "kill -9 #{pid}"
self.record("warn", "reset", "Running 'systemctl kill minecraft' (last resort)...")
system "systemctl kill minecraft" # 没招了,毁灭吧
sleep 0.5
self.record("info", "reset", "Running 'systemctl start minecraft' (rebirth)...")
system "systemctl start minecraft" # 重生
self.record("info", "reset", "Force-reset sequence completed.")
break
end
while true
sleep 0.5
SystemdNotifier.notify("WATCHDOG=1")
proc_status = Process.waitpid2(pid, Process::WNOHANG)
if proc_status # 子进程已退出,返回 [pid, status]
_, status = proc_status
elapsed = (Time.now - tick_beg).round(2)
if status.success?
self.record("info", "reset", "'systemctl restart' succeeded in #{elapsed}s.")
@@rst_counter = 0 # 成功时重置计数器
break
else
self.record("error", "reset", "'systemctl restart' failed with exitcode #{status.exitstatus} after #{elapsed}s.")
break
end
else # 子进程仍在运行 (WNOHANG 返回 nil)
if Time.now - tick_beg > PERSISTENCE_PERIOD then
self.record("warn", "reset",
"'systemctl restart' timed out after #{PERSISTENCE_PERIOD}s. Force-killing PID #{pid}...")
system "kill -9 #{pid}"
self.record("warn", "reset", "Running 'systemctl kill minecraft' (last resort)...")
system "systemctl kill minecraft" # 没招了,毁灭吧
sleep 0.5
self.record("info", "reset", "Running 'systemctl start minecraft' (rebirth)...")
system "systemctl start minecraft" # 重生
self.record("info", "reset", "Force-reset sequence completed.")
break
end
end
end
end