fn_serverquery 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/bin/bash
  2. # LGSM fn_serverquery function
  3. # Author: Daniel Gibbs
  4. # Website: http://danielgibbs.co.uk
  5. # Version: 231214
  6. # uses gsquery.py to directly query the server
  7. # detects if the server locks up
  8. if [ -f gsquery.py ]; then
  9. if [ "${engine}" == "unreal" ]||[ "${engine}" == "unreal2" ]; then
  10. gameport=$(grep Port= "${systemdir}/${ini}"|grep -v Master|grep -v LAN|grep -v Proxy|grep -v Listen|tr -d '\r'|tr -cd [:digit:])
  11. port=$((${gameport} + 1))
  12. elif [ "${engine}" == "spark" ]; then
  13. port=$((${port} + 1))
  14. elif [ "${engine}" == "realvirtuality" ]; then
  15. queryport=$(grep -s steamqueryport= "${servercfgfullpath}"|grep -v //|tr -d '\r'|tr -cd [:digit:])
  16. port=${queryport}
  17. elif [ "${engine}" == "unity3d" ]; then
  18. gameport=$(grep ServerPort "${servercfgfullpath}"|tr -cd [:digit:])
  19. port=$((${gameport} + 1))
  20. fi
  21. fn_printinfo "Monitoring ${servicename}: Detected gsquery.py"
  22. fn_scriptlog "Detected gsquery.py"
  23. sleep 1
  24. fn_printdots "Monitoring ${servicename}: Querying port: ${ip}:${port} : QUERYING"
  25. fn_scriptlog "Querying port: ${ip}:${port} : QUERYING"
  26. sleep 1
  27. serverquery=$(./gsquery.py -a ${ip} -p ${port} -e ${engine} 2>&1)
  28. exitcode=$?
  29. if [ "${exitcode}" == "1" ]||[ "${exitcode}" == "2" ]||[ "${exitcode}" == "3" ]||[ "${exitcode}" == "4" ]; then
  30. fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port} : ${serverquery}"
  31. sleep 1
  32. echo -en "\n"
  33. fn_scriptlog "Querying port: ${ip}:${port} : ${serverquery}"
  34. if [[ -z "${secondquery}" ]]; then
  35. fn_printinfo "Monitoring ${servicename}: Waiting 30 seconds to re-query"
  36. fn_scriptlog "Waiting 30 seconds to re-query"
  37. sleep 30
  38. secondquery=1
  39. fn_serverquery
  40. fi
  41. if [ "${emailnotification}" = "on" ]; then
  42. subject="${servicename} Monitor - Starting ${servername}"
  43. failurereason="Failed to query ${servicename}: ${serverquery}"
  44. actiontaken="restarted ${servicename}"
  45. fn_emailnotification
  46. fi
  47. fn_restartserver
  48. exit
  49. elif [ "${exitcode}" == "0" ]; then
  50. fn_printok "Monitoring ${servicename}: Querying port: ${ip}:${port} : OK"
  51. fn_scriptlog "Querying port: ${ip}:${port} : OK"
  52. sleep 1
  53. echo -en "\n"
  54. exit
  55. elif [ "${exitcode}" == "126" ]; then
  56. fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port} : ERROR: ./gsquery.py: Permission denied"
  57. fn_scriptlog "Querying port: ${ip}:${port} : ./gsquery.py: Permission denied"
  58. sleep 1
  59. echo -en "\n"
  60. echo "Attempting to resolve automatically"
  61. chmod +x -v gsquery.py
  62. exitcode=$?
  63. if [ "${exitcode}" == "0" ]; then
  64. fn_serverquery
  65. else
  66. echo -en "\nUnable to resolve automatically. Please manually fix permissions\n"
  67. owner=$(ls -al gsquery.py|awk '{ print $3 }')
  68. echo "As user ${owner} or root run the following command"
  69. whoami=$(whoami)
  70. echo -en "\nchown ${whoami}:${whoami} gsquery.py\n\n"
  71. exit
  72. fi
  73. else
  74. fn_printfail "Monitoring ${servicename}: Querying port: ${ip}:${port} : UNKNOWN ERROR"
  75. fn_scriptlog "Querying port: ${ip}:${port} : UNKNOWN ERROR"
  76. sleep 1
  77. echo -en "\n"
  78. ./gsquery.py -a ${ip} -p ${port} -e ${engine}
  79. exit
  80. fi
  81. fi