PlutoniumServerConfigs/T6ServerConfigs/WatchDog.bat
2024-03-04 16:04:41 -05:00

89 lines
4.3 KiB
Batchfile

@echo off
:://////////////////////////////////////////////////////////////////////////
::// WatchDog Configuration file ///
:://////////////////////////////////////////////////////////////////////////
::// Name of the server to identify your bat ///
:://////////////////////////////////////////////////////////////////////////
set name=My PlutoT6 MP Server 1
:://////////////////////////////////////////////////////////////////////////
::// The regex search for the window name of the sever. (optional) //
::// //
::// This will help identify which window needs closing in case the //
::// server errors out or freezes according to filename on g_log //
::// //
::// No color codes! This is base off your server window title! //
:://////////////////////////////////////////////////////////////////////////
set server_title_regex=Plutonium T6 Dedicated Server
:://////////////////////////////////////////////////////////////////////////
::// Rate to check if server crash or freeze by reading game_mp.log //
::// If gts timelimit is longer then 10 mins. You might want to increase //
:://////////////////////////////////////////////////////////////////////////
::// 10800 - 3 hours //
::// 7200 - 2 hours //
::// 3600 - 1 hour //
::// 1800 - 30 mins //
::// 1200 - 20 mins (recommended) //
::// 900 - 15 mins //
::// 720 - 12 mins //
::// 660 - 11 mins (Don't recommend!) //
:://////////////////////////////////////////////////////////////////////////
set check_rate=1200
:://////////////////////////////////////////////////////////////////////////
::// Server log location and filename //
::// Only change if you hosting more then 1 server //
::// Unless you change g_log on server.cfg then match with that. //
:://////////////////////////////////////////////////////////////////////////
set log_path=%localappdata%\Plutonium\storage\t6\logs
set log_file=games_mp.log
:://////////////////////////////////////////////////////////////////////////
::// DONE!! WARNING! Don't mess with anything below this line. SEROUSLY! //
::// Only edit if you know what you doing!!! //
:://////////////////////////////////////////////////////////////////////////
::ADVANCED USERS
set gamepath=%cd%
set server_exe=plutonium-bootstrapper-win32.exe
::The Magic happens below..
::Code inspired by Guy from botware.
::Reference https://github.com/ineedbots/iw4x_bot_warfare/blob/master/z_server_watchdog.bat
title %name% - Server watchdog
echo (%date%) - (%time%) Now watching %log_path%\%log_file% modified date.
::https://superuser.com/questions/699769/batch-file-last-modification-time-with-seconds
dir "%log_path%"\"%log_file%" > nul
for /f "delims=" %%i in ('"forfiles /p "%log_path%" /m "%log_file%" /c "cmd /c echo @ftime" "') do set modif_time_temp=%%i
:Server
set modif_time=%modif_time_temp%
timeout /t %check_rate% /nobreak > nul
::echo (%date%) - (%time%) Checking if %log_file% date has been modified since %check_rate% seconds is up...
dir "%log_path%"\"%log_file%" > nul
for /f "delims=" %%i in ('"forfiles /p "%log_path%" /m "%log_file%" /c "cmd /c echo @ftime" "') do set modif_time_temp=%%i
if "%modif_time_temp%" == "%modif_time%" (
echo "(%date%) - (%time%) WARNING: %name% server hung, killing server..."
::https://stackoverflow.com/questions/26552368/windows-batch-file-taskkill-if-window-title-contains-text
for /f "tokens=2 delims=," %%a in ('
tasklist /fi "imagename eq %server_exe%" /v /fo:csv /nh
^| findstr /r /c:"%server_title_regex%"
') do taskkill /pid %%a /f
timeout /T 8 /nobreak > nul
echo "(%date%) - (%time%) Now watching %log_path%\%log_file% modified date again."
)
goto Server