|
|
@@ -0,0 +1,78 @@
|
|
|
+#!/bin/bash
|
|
|
+# LGSM fn_serverquery function
|
|
|
+# Author: Daniel Gibbs
|
|
|
+# Website: http://danielgibbs.co.uk
|
|
|
+# Version: 011214
|
|
|
+
|
|
|
+# uses gsquery.py to directly query the server
|
|
|
+# detects if the server locks up
|
|
|
+if [ -f gsquery.py ]; then
|
|
|
+ if [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then
|
|
|
+ gameport=$(grep Port= "${systemdir}/${ini}"|grep -v Master|grep -v LAN|grep -v Proxy|grep -v Listen|sed 's/\Port=//g')
|
|
|
+ port=$((${gameport} + 1))
|
|
|
+ elif [ "${engine}" == "spark" ]; then
|
|
|
+ port=$((${port} + 1))
|
|
|
+ elif [ "${engine}" == "realvirtuality" ]; then
|
|
|
+ port=${queryport}
|
|
|
+ fi
|
|
|
+ fn_printinfo "Monitoring ${servicename}: Detected gsquery.py"
|
|
|
+ fn_scriptlog "Detected gsquery.py"
|
|
|
+ sleep 1
|
|
|
+ fn_printdots "Monitoring ${servicename}: Querying port: ${ip}:${port}: QUERYING"
|
|
|
+ fn_scriptlog "Querying port: ${ip}:${port}: QUERYING"
|
|
|
+ sleep 1
|
|
|
+ serverquery=$(./gsquery.py -a ${ip} -p ${port} -e ${engine} 2>&1)
|
|
|
+ exitcode=$?
|
|
|
+ if [ "${exitcode}" == "1" ]||[ "${exitcode}" == "2" ]||[ "${exitcode}" == "3" ]||[ "${exitcode}" == "4" ]; then
|
|
|
+ fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: ${serverquery}"
|
|
|
+ sleep 1
|
|
|
+ echo -en "\n"
|
|
|
+ fn_scriptlog "Querying port: ${ip}:${port}: ${serverquery}"
|
|
|
+ if [[ -z "${secondquery}" ]]; then
|
|
|
+ fn_printinfo "Monitoring ${servicename}: Waiting 30 seconds to re-query"
|
|
|
+ fn_scriptlog "Waiting 30 seconds to re-query"
|
|
|
+ sleep 30
|
|
|
+ secondquery=1
|
|
|
+ fn_serverquery
|
|
|
+ fi
|
|
|
+ if [ "${emailnotification}" = "on" ]; then
|
|
|
+ subject="${servicename} Monitor - Starting ${servername}"
|
|
|
+ failurereason="Failed to query ${servicename}: ${serverquery}"
|
|
|
+ actiontaken="restarted ${servicename}"
|
|
|
+ fn_emailnotification
|
|
|
+ fi
|
|
|
+ fn_restartserver
|
|
|
+ exit
|
|
|
+ elif [ "${exitcode}" == "0" ]; then
|
|
|
+ fn_printok "Monitoring ${servicename}: Querying port: ${ip}:${port}: OK"
|
|
|
+ fn_scriptlog "Querying port: ${ip}:${port}: OK"
|
|
|
+ sleep 1
|
|
|
+ echo -en "\n"
|
|
|
+ exit
|
|
|
+ elif [ "${exitcode}" == "126" ]; then
|
|
|
+ fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: ERROR: ./gsquery.py: Permission denied"
|
|
|
+ fn_scriptlog "Querying port: ${ip}:${port}: ./gsquery.py: Permission denied"
|
|
|
+ sleep 1
|
|
|
+ echo -en "\n"
|
|
|
+ echo "Attempting to resolve automatically"
|
|
|
+ chmod +x -v gsquery.py
|
|
|
+ exitcode=$?
|
|
|
+ if [ "${exitcode}" == "0" ]; then
|
|
|
+ fn_serverquery
|
|
|
+ else
|
|
|
+ echo -en "\nUnable to resolve automatically. Please manually fix permissions\n"
|
|
|
+ owner=$(ls -al gsquery.py|awk '{ print $3 }')
|
|
|
+ echo "As user ${owner} or root run the following command"
|
|
|
+ whoami=$(whoami)
|
|
|
+ echo -en "\nchown ${whoami}:${whoami} gsquery.py\n\n"
|
|
|
+ exit
|
|
|
+ fi
|
|
|
+ else
|
|
|
+ fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port}: UNKNOWN ERROR"
|
|
|
+ fn_scriptlog "Querying port: ${ip}:${port}: UNKNOWN ERROR"
|
|
|
+ sleep 1
|
|
|
+ echo -en "\n"
|
|
|
+ ./gsquery.py -a ${ip} -p ${port} -e ${engine}
|
|
|
+ exit
|
|
|
+ fi
|
|
|
+fi
|