namespace Supercell.Laser.Server { using System; using System.Diagnostics; using System.IO; /// /// Автозапуск Supercell.Laser.Defender при старте сервера. /// Запускается детачед (setsid) => продолжает работать после остановки C#-сервера. /// start.sh идемпотентен: если защита уже поднята, повторный вызов ничего не ломает. /// public static class DefenderLauncher { private const string StartScript = "/root/36.218/Supercell.Laser.Defender/bin/start.sh"; public static void EnsureRunning() { try { if (!File.Exists(StartScript)) { Logger.Print($"[Defender] скрипт не найден, пропускаю: {StartScript}"); return; } ProcessStartInfo psi = new ProcessStartInfo { FileName = "/bin/bash", Arguments = $"-c \"setsid bash '{StartScript}' >/dev/null 2>&1 &\"", UseShellExecute = false, CreateNoWindow = true }; Process.Start(psi); Logger.Print("[Defender] защита запущена (или уже работала)"); } catch (Exception e) { // Никогда не роняем сервер из-за защиты. Logger.Print($"[Defender] не удалось запустить: {e.Message}"); } } } }