test.sh 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. #!/bin/bash
  2. # Just Cause 2
  3. # Server Management Script
  4. # Author: Daniel Gibbs
  5. # Website: http://gameservermanagers.com
  6. version="150715"
  7. #### Variables ####
  8. # Notification Email
  9. # (on|off)
  10. emailnotification="off"
  11. email="email@example.com"
  12. # Steam login
  13. steamuser="anonymous"
  14. steampass=""
  15. # Start Variables
  16. updateonstart="off"
  17. fn_parms(){
  18. parms=""
  19. }
  20. #### Advanced Variables ####
  21. # Steam
  22. appid="261140"
  23. # Server Details
  24. servicename="jc2-server"
  25. gamename="Just Cause 2"
  26. engine="avalanche"
  27. # Directories
  28. rootdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  29. selfname="$(basename $0)"
  30. lockselfname=".${servicename}.lock"
  31. filesdir="${rootdir}/serverfiles"
  32. systemdir="${filesdir}"
  33. executabledir="${filesdir}"
  34. executable="./Jcmp-Server"
  35. servercfg="config.lua"
  36. servercfgdir="${filesdir}"
  37. servercfgfullpath="${servercfgdir}/${servercfg}"
  38. servercfgdefault="${servercfgdir}/default_config.lua"
  39. backupdir="${rootdir}/backups"
  40. # Logging
  41. logdays="7"
  42. #gamelogdir="" # No server logs available
  43. scriptlogdir="${rootdir}/log/script"
  44. consolelogdir="${rootdir}/log/console"
  45. scriptlog="${scriptlogdir}/${servicename}-script.log"
  46. consolelog="${consolelogdir}/${servicename}-console.log"
  47. emaillog="${scriptlogdir}/${servicename}-email.log"
  48. scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log"
  49. consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%d-%m-%Y-%H-%M-%S').log"
  50. ##### Script #####
  51. # Do not edit
  52. fn_runfunction(){
  53. # Functions are downloaded and run with this function
  54. if [ ! -f "${rootdir}/functions/${functionfile}" ]; then
  55. cd "${rootdir}"
  56. if [ ! -d "functions" ]; then
  57. mkdir functions
  58. fi
  59. cd functions
  60. echo -e " loading ${functionfile}...\c"
  61. wget -N /dev/null https://raw.githubusercontent.com/dgibbs64/linuxgsm/master/functions/${functionfile} 2>&1 | grep -F HTTP | cut -c45-
  62. chmod +x "${functionfile}"
  63. cd "${rootdir}"
  64. fi
  65. source "${rootdir}/functions/${functionfile}"
  66. }
  67. fn_functions(){
  68. # Functions are defined in fn_functions.
  69. functionfile="${FUNCNAME}"
  70. fn_runfunction
  71. }
  72. fn_functions
  73. getopt=$1
  74. fn_currentstatus(){
  75. pid=$(tmux list-sessions 2>&1 | awk '{print $1}' | grep -Ec "^${servicename}:")
  76. if [ "${pid}" == "0" ]; then
  77. currentstatus="OFFLINE"
  78. else
  79. currentstatus="ONLINE"
  80. fi
  81. }
  82. fn_setstatus(){
  83. fn_currentstatus
  84. echo""
  85. echo "Required status: ${requiredstatus}"
  86. while [ "${requiredstatus}" != "${currentstatus}" ]; do
  87. fn_currentstatus
  88. echo -ne "Current status: ${currentstatus}\\r"
  89. if [ "${requiredstatus}" == "ONLINE" ]; then
  90. (fn_start > /dev/null 2>&1)
  91. else
  92. (fn_stop > /dev/null 2>&1)
  93. fi
  94. done
  95. echo -ne "Current status: ${currentstatus}\\r"
  96. echo -e "\n"
  97. echo "Test starting:"
  98. echo ""
  99. sleep 0.5
  100. }
  101. echo "1.0 - start - no files"
  102. echo "================================="
  103. echo "Description:"
  104. echo "Test script reaction to missing server files."
  105. requiredstatus="OFFLINE"
  106. fn_setstatus
  107. (fn_start)
  108. echo ""
  109. echo "Test complete!"
  110. sleep 1
  111. echo ""
  112. echo "2.0 - install"
  113. echo "================================="
  114. echo "Description:"
  115. echo "install ${gamename} server."
  116. requiredstatus="OFFLINE"
  117. fn_setstatus
  118. fn_autoinstall
  119. echo ""
  120. echo "Test complete!"
  121. sleep 1
  122. echo ""
  123. echo "3.1 - start"
  124. echo "================================="
  125. echo "Description:"
  126. echo "start ${gamename} server."
  127. requiredstatus="OFFLINE"
  128. fn_setstatus
  129. fn_start
  130. echo ""
  131. echo "Test complete!"
  132. sleep 1
  133. echo ""
  134. echo "3.2 - start - online"
  135. echo "================================="
  136. echo "Description:"
  137. echo "start ${gamename} server while already running."
  138. requiredstatus="ONLINE"
  139. fn_setstatus
  140. (fn_start)
  141. echo ""
  142. echo "Test complete!"
  143. sleep 1
  144. echo ""
  145. echo "3.3 - stop"
  146. echo "================================="
  147. echo "Description:"
  148. echo "stop ${gamename} server."
  149. requiredstatus="ONLINE"
  150. fn_setstatus
  151. fn_stop
  152. echo ""
  153. echo "Test complete!"
  154. sleep 1
  155. echo ""
  156. echo "3.4 - stop - offline"
  157. echo "================================="
  158. echo "Description:"
  159. echo "stop ${gamename} server while already stopped."
  160. requiredstatus="OFFLINE"
  161. fn_setstatus
  162. (fn_stop)
  163. echo ""
  164. echo "Test complete!"
  165. sleep 1
  166. echo ""
  167. echo "3.5 - restart"
  168. echo "================================="
  169. echo "Description:"
  170. echo "restart ${gamename}."
  171. requiredstatus="ONLINE"
  172. fn_setstatus
  173. fn_restart
  174. echo ""
  175. echo "Test complete!"
  176. sleep 1
  177. echo ""
  178. echo "3.5 - restart - offline"
  179. echo "================================="
  180. echo "Description:"
  181. echo "restart ${gamename} while already stopped."
  182. requiredstatus="OFFLINE"
  183. fn_setstatus
  184. fn_restart
  185. echo ""
  186. echo "Test complete!"
  187. sleep 1
  188. echo ""
  189. echo "4.1 - update"
  190. echo "================================="
  191. echo "Description:"
  192. echo "check for updates."
  193. requiredstatus="OFFLINE"
  194. fn_setstatus
  195. fn_update_check
  196. echo ""
  197. echo "Test complete!"
  198. sleep 1
  199. echo ""
  200. echo "4.2 - update - change buildid"
  201. echo "================================="
  202. echo "Description:"
  203. echo "change the buildid tricking SteamCMD to update."
  204. requiredstatus="OFFLINE"
  205. fn_setstatus
  206. fn_printinfonl "changed buildid to 0."
  207. sed -i 's/[0-9]\+/0/' ${filesdir}/steamapps/appmanifest_${appid}.acf
  208. fn_update_check
  209. echo ""
  210. echo "Test complete!"
  211. sleep 1
  212. echo ""
  213. echo "4.3 - update - change buildid - online"
  214. echo "================================="
  215. echo "Description:"
  216. echo "change the buildid tricking SteamCMD to update server while already running."
  217. requiredstatus="ONLINE"
  218. fn_setstatus
  219. fn_printinfonl "changed buildid to 0."
  220. sed -i 's/[0-9]\+/0/' ${filesdir}/steamapps/appmanifest_${appid}.acf
  221. fn_update_check
  222. echo ""
  223. echo "Test complete!"
  224. sleep 1
  225. echo ""
  226. echo "4.4 - update - remove appmanifest file"
  227. echo "================================="
  228. echo "Description:"
  229. echo "removing appmanifest file will cause script to repair."
  230. requiredstatus="OFFLINE"
  231. fn_setstatus
  232. fn_printinfonl "removed appmanifest_${appid}.acf."
  233. rm --verbose "${filesdir}/steamapps/appmanifest_${appid}.acf"
  234. fn_update_check
  235. echo ""
  236. echo "Test complete!"
  237. sleep 1
  238. echo ""
  239. echo "4.5 - force-update"
  240. echo "================================="
  241. echo "Description:"
  242. echo "force-update bypassing update check."
  243. requiredstatus="OFFLINE"
  244. fn_setstatus
  245. fn_update_check
  246. echo ""
  247. echo "Test complete!"
  248. sleep 1
  249. echo ""
  250. echo "4.6 - force-update - online"
  251. echo "================================="
  252. echo "Description:"
  253. echo "force-update bypassing update check server while already running."
  254. requiredstatus="ONLINE"
  255. fn_setstatus
  256. fn_update_check
  257. echo ""
  258. echo "Test complete!"
  259. sleep 1
  260. echo ""
  261. echo "4.7 - validate"
  262. echo "================================="
  263. echo "Description:"
  264. echo "validate server files."
  265. requiredstatus="OFFLINE"
  266. fn_setstatus
  267. fn_validate
  268. echo ""
  269. echo "Test complete!"
  270. sleep 1
  271. echo ""
  272. echo "4.8 - validate - online"
  273. echo "================================="
  274. echo "Description:"
  275. echo "validate server files while server while already running."
  276. requiredstatus="ONLINE"
  277. fn_setstatus
  278. fn_validate
  279. echo ""
  280. echo "Test complete!"
  281. sleep 1
  282. echo ""
  283. echo "5.1 - monitor - online"
  284. echo "================================="
  285. echo "Description:"
  286. echo "run monitor server while already running."
  287. requiredstatus="ONLINE"
  288. fn_setstatus
  289. (fn_monitor)
  290. echo ""
  291. echo "Test complete!"
  292. sleep 1
  293. echo ""
  294. echo "5.2 - monitor - offline - no lockfile"
  295. echo "================================="
  296. echo "Description:"
  297. echo "run monitor while server is offline with no lockfile"
  298. requiredstatus="OFFLINE"
  299. fn_setstatus
  300. (fn_monitor)
  301. echo ""
  302. echo "Test complete!"
  303. sleep 1
  304. echo ""
  305. echo "5.2 - monitor - offline - with lockfile"
  306. echo "================================="
  307. echo "Description:"
  308. echo "run monitor while server is offline with no lockfile"
  309. requiredstatus="OFFLINE"
  310. fn_setstatus
  311. fn_printinfonl "creating lockfile."
  312. date > "${rootdir}/${lockselfname}"
  313. (fn_monitor)
  314. echo ""
  315. echo "Test complete!"
  316. sleep 1
  317. echo ""
  318. echo "5.2 - monitor - gsquery.py failure"
  319. echo "================================="
  320. echo "Description:"
  321. echo "gsquery.py will fail to query port"
  322. requiredstatus="ONLINE"
  323. fn_setstatus
  324. port=${port+1}
  325. (fn_monitor)
  326. port=${port-1}
  327. echo ""
  328. echo "Test complete!"
  329. sleep 1
  330. echo ""