| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #!/bin/bash
- # LGSM fn_monitor_query function
- # Author: Daniel Gibbs
- # Website: http://gameservermanagers.com
- # Version: 030715
- # Description: uses gsquery.py to directly query the server.
- # Detects if the server has frozen.
- local modulename="Monitor"
- if [ -f "${rootdir}/gsquery.py" ]; then
- if [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then
- gameport=$(grep Port= "${servercfgfullpath}"|grep -v Master|grep -v LAN|grep -v Proxy|grep -v Listen|tr -d '\r'|tr -cd [:digit:])
- port=$((${gameport} + 1))
- elif [ "${engine}" == "spark" ]; then
- port=$((${port} + 1))
- elif [ "${engine}" == "realvirtuality" ]; then
- queryport=$(grep -s steamqueryport= "${servercfgfullpath}"|grep -v //|tr -d '\r'|tr -cd [:digit:])
- port=${queryport}
- elif [ "${engine}" == "unity3d" ]; then
- gameport=$(grep ServerPort "${servercfgfullpath}"|tr -cd [:digit:])
- port=$((${gameport} + 1))
- fi
- fn_printinfo "Detected gsquery.py"
- fn_scriptlog "Detected gsquery.py"
- sleep 1
- fn_printdots "Querying port: ${ip}:${port} : QUERYING"
- fn_scriptlog "Querying port: ${ip}:${port} : QUERYING"
- sleep 1
- serverquery=$(${rootdir}/gsquery.py -a ${ip} -p ${port} -e ${engine} 2>&1)
- exitcode=$?
- if [ "${exitcode}" == "1" ]||[ "${exitcode}" == "2" ]||[ "${exitcode}" == "3" ]||[ "${exitcode}" == "4" ]; then
- fn_printfail "Querying port: ${ip}:${port} : ${serverquery}"
- fn_scriptlog "Querying port: ${ip}:${port} : ${serverquery}"
- sleep 1
- echo -en "\n"
- if [[ -z "${secondquery}" ]]; then
- if [ "${engine}" == "unreal2" ]; then
- # unreal 2: Map change can take around 60 seconds
- fn_printinfo "Waiting 60 seconds to re-query"
- fn_scriptlog "Waiting 60 seconds to re-query"
- sleep 60
- else
- fn_printinfo "Waiting 30 seconds to re-query"
- fn_scriptlog "Waiting 30 seconds to re-query"
- sleep 30
- fi
- secondquery=1
- fn_monitor_query
- fi
- if [ "${emailnotification}" = "on" ]; then
- fn_details_config
- subject="${servicename} Monitor - Starting ${servername}"
- failurereason="Failed to query ${servicename}: ${serverquery}"
- actiontaken="restarted ${servicename}"
- fn_email
- fi
- fn_restart
- exit 1
- elif [ "${exitcode}" == "0" ]; then
- fn_printok "Querying port: ${ip}:${port} : OK"
- fn_scriptlog "Querying port: ${ip}:${port} : OK"
- sleep 1
- echo -en "\n"
- exit
- elif [ "${exitcode}" == "126" ]; then
- fn_printfail "Querying port: ${ip}:${port} : ERROR: ${rootdir}/gsquery.py: Permission denied"
- fn_scriptlog "Querying port: ${ip}:${port} : ERROR: ${rootdir}/gsquery.py: Permission denied"
- sleep 1
- echo -en "\n"
- echo "Attempting to resolve automatically"
- chmod +x -v "${rootdir}/gsquery.py"
- exitcode=$?
- if [ "${exitcode}" == "0" ]; then
- fn_monitor_query
- else
- fn_printfailure "Unable to resolve automatically. Please manually fix permissions.\n"
- owner=$(ls -al ${rootdir}/gsquery.py|awk '{ print $3 }')
- echo "As user ${owner} or root run the following command."
- whoami=$(whoami)
- echo -en "\nchown ${whoami}:${whoami} ${rootdir}/gsquery.py\n\n"
- exit 1
- fi
- else
- fn_printfail "Querying port: ${ip}:${port} : UNKNOWN ERROR"
- fn_scriptlog "Querying port: ${ip}:${port} : UNKNOWN ERROR"
- sleep 1
- echo -en "\n"
- ${rootdir}/gsquery.py -a ${ip} -p ${port} -e ${engine}
- exit 1
- fi
- else
- fn_printfailnl "Could not find ${rootdir}/gsquery.py"
- fn_scriptlog "Could not find ${rootdir}/gsquery.py"
- fi
|