Менеджер запускает сервер PZ как дочерний процесс и держит его stdin/stdout: отсюда живая консоль без RCON, стриминг логов через SSE и корректная остановка по цепочке quit -> SIGTERM -> SIGKILL для всей группы процессов. Сам менеджер работает под systemd. Что входит: - управление жизненным циклом сервера, автозапуск и автоподъём после падения; - метрики процесса из /proc и состояние хоста, список игроков онлайн; - редакторы servertest.ini и SandboxVars.lua, сохраняющие исходное форматирование файлов; - моды: списки Workshop ID и Mod ID с порядком загрузки, названия из Steam; - бэкапы мира по расписанию и вручную, с ротацией и восстановлением; - установка и обновление сервера через SteamCMD; - вход по логину и паролю, первичная настройка по одноразовому коду. Веб-интерфейс без сборщика, вшит в бинарник через embed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
29 lines
693 B
Go
29 lines
693 B
Go
//go:build windows
|
|
|
|
package pzserver
|
|
|
|
import (
|
|
"os/exec"
|
|
"syscall"
|
|
)
|
|
|
|
// На Windows групп процессов в POSIX-смысле нет. Менеджер рассчитан на
|
|
// Ubuntu; эти заглушки нужны лишь для сборки и отладки под Windows.
|
|
func setProcessGroup(cmd *exec.Cmd) {}
|
|
|
|
func processGroupID(pid int) int { return pid }
|
|
|
|
func signalGroup(pgid int, sig syscall.Signal) error {
|
|
p, err := syscall.OpenProcess(syscall.PROCESS_TERMINATE, false, uint32(pgid))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer syscall.CloseHandle(p)
|
|
return syscall.TerminateProcess(p, 1)
|
|
}
|
|
|
|
var (
|
|
sigTerm = syscall.Signal(15)
|
|
sigKill = syscall.Signal(9)
|
|
)
|