test.sh 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  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="on"
  11. email="me@danielgibbs.co.uk"
  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)/jc2server"
  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. counter=0
  87. while [ "${requiredstatus}" != "${currentstatus}" ]; do
  88. counter=$((counter+1))
  89. fn_currentstatus
  90. echo -ne "Current status: ${currentstatus}\\r"
  91. if [ "${requiredstatus}" == "ONLINE" ]; then
  92. (fn_start > /dev/null 2>&1)
  93. else
  94. (fn_stop > /dev/null 2>&1)
  95. fi
  96. if [ "${counter}" -gt "5" ]; then
  97. currentstatus="FAIL"
  98. echo "Current status: ${currentstatus}"
  99. echo ""
  100. echo "Unable to start or stop server."
  101. exit
  102. fi
  103. done
  104. echo -ne "Current status: ${currentstatus}\\r"
  105. echo -e "\n"
  106. echo "Test starting:"
  107. echo ""
  108. sleep 0.5
  109. }
  110. echo "================================="
  111. echo "TravisCI Tests"
  112. echo "Linux Game Server Manager"
  113. echo "by Daniel Gibbs"
  114. echo "http://gameservermanagers.com"
  115. echo "================================="
  116. echo ""
  117. sleep 1
  118. echo "================================="
  119. echo "Generic Server Tests"
  120. echo "Using: ${gamename}"
  121. echo "================================="
  122. echo ""
  123. sleep 1
  124. mkdir ${rootfdir}
  125. echo "1.0 - start - no files"
  126. echo "================================="
  127. echo "Description:"
  128. echo "Test script reaction to missing server files."
  129. requiredstatus="OFFLINE"
  130. fn_setstatus
  131. (fn_start)
  132. echo ""
  133. echo "Test complete!"
  134. sleep 1
  135. echo ""
  136. echo "2.0 - install"
  137. echo "================================="
  138. echo "Description:"
  139. echo "install ${gamename} server."
  140. requiredstatus="OFFLINE"
  141. fn_setstatus
  142. fn_autoinstall
  143. echo ""
  144. echo "Test complete!"
  145. sleep 1
  146. echo ""
  147. echo "3.1 - start"
  148. echo "================================="
  149. echo "Description:"
  150. echo "start ${gamename} server."
  151. requiredstatus="OFFLINE"
  152. fn_setstatus
  153. fn_start
  154. echo ""
  155. echo "Test complete!"
  156. sleep 1
  157. echo ""
  158. echo "3.2 - start - online"
  159. echo "================================="
  160. echo "Description:"
  161. echo "start ${gamename} server while already running."
  162. requiredstatus="ONLINE"
  163. fn_setstatus
  164. (fn_start)
  165. echo ""
  166. echo "Test complete!"
  167. sleep 1
  168. echo ""
  169. echo "3.3 - start - updateonstart"
  170. echo "================================="
  171. echo "Description:"
  172. echo "will update server on start."
  173. requiredstatus="ONLINE"
  174. fn_setstatus
  175. (
  176. updateonstart="on"
  177. fn_start
  178. )
  179. echo ""
  180. echo "Test complete!"
  181. sleep 1
  182. echo ""
  183. echo "3.4 - stop"
  184. echo "================================="
  185. echo "Description:"
  186. echo "stop ${gamename} server."
  187. requiredstatus="ONLINE"
  188. fn_setstatus
  189. fn_stop
  190. echo ""
  191. echo "Test complete!"
  192. sleep 1
  193. echo ""
  194. echo "3.5 - stop - offline"
  195. echo "================================="
  196. echo "Description:"
  197. echo "stop ${gamename} server while already stopped."
  198. requiredstatus="OFFLINE"
  199. fn_setstatus
  200. (fn_stop)
  201. echo ""
  202. echo "Test complete!"
  203. sleep 1
  204. echo ""
  205. echo "3.6 - restart"
  206. echo "================================="
  207. echo "Description:"
  208. echo "restart ${gamename}."
  209. requiredstatus="ONLINE"
  210. fn_setstatus
  211. fn_restart
  212. echo ""
  213. echo "Test complete!"
  214. sleep 1
  215. echo ""
  216. echo "3.7 - restart - offline"
  217. echo "================================="
  218. echo "Description:"
  219. echo "restart ${gamename} while already stopped."
  220. requiredstatus="OFFLINE"
  221. fn_setstatus
  222. fn_restart
  223. echo ""
  224. echo "Test complete!"
  225. sleep 1
  226. echo ""
  227. echo "4.1 - update"
  228. echo "================================="
  229. echo "Description:"
  230. echo "check for updates."
  231. requiredstatus="OFFLINE"
  232. fn_setstatus
  233. fn_update_check
  234. echo ""
  235. echo "Test complete!"
  236. sleep 1
  237. echo ""
  238. echo "4.2 - update - change buildid"
  239. echo "================================="
  240. echo "Description:"
  241. echo "change the buildid tricking SteamCMD to update."
  242. requiredstatus="OFFLINE"
  243. fn_setstatus
  244. fn_printinfonl "changed buildid to 0."
  245. sed -i 's/[0-9]\+/0/' ${filesdir}/steamapps/appmanifest_${appid}.acf
  246. fn_update_check
  247. echo ""
  248. echo "Test complete!"
  249. sleep 1
  250. echo ""
  251. echo "4.3 - update - change buildid - online"
  252. echo "================================="
  253. echo "Description:"
  254. echo "change the buildid tricking SteamCMD to update server while already running."
  255. requiredstatus="ONLINE"
  256. fn_setstatus
  257. fn_printinfonl "changed buildid to 0."
  258. sed -i 's/[0-9]\+/0/' ${filesdir}/steamapps/appmanifest_${appid}.acf
  259. fn_update_check
  260. echo ""
  261. echo "Test complete!"
  262. sleep 1
  263. echo ""
  264. echo "4.4 - update - remove appmanifest file"
  265. echo "================================="
  266. echo "Description:"
  267. echo "removing appmanifest file will cause script to repair."
  268. requiredstatus="OFFLINE"
  269. fn_setstatus
  270. fn_printinfonl "removed appmanifest_${appid}.acf."
  271. rm --verbose "${filesdir}/steamapps/appmanifest_${appid}.acf"
  272. fn_update_check
  273. echo ""
  274. echo "Test complete!"
  275. sleep 1
  276. echo ""
  277. echo "4.5 - force-update"
  278. echo "================================="
  279. echo "Description:"
  280. echo "force-update bypassing update check."
  281. requiredstatus="OFFLINE"
  282. fn_setstatus
  283. fn_update_check
  284. echo ""
  285. echo "Test complete!"
  286. sleep 1
  287. echo ""
  288. echo "4.6 - force-update - online"
  289. echo "================================="
  290. echo "Description:"
  291. echo "force-update bypassing update check server while already running."
  292. requiredstatus="ONLINE"
  293. fn_setstatus
  294. fn_update_check
  295. echo ""
  296. echo "Test complete!"
  297. sleep 1
  298. echo ""
  299. echo "4.7 - validate"
  300. echo "================================="
  301. echo "Description:"
  302. echo "validate server files."
  303. requiredstatus="OFFLINE"
  304. fn_setstatus
  305. fn_validate
  306. echo ""
  307. echo "Test complete!"
  308. sleep 1
  309. echo ""
  310. echo "4.8 - validate - online"
  311. echo "================================="
  312. echo "Description:"
  313. echo "validate server files while server while already running."
  314. requiredstatus="ONLINE"
  315. fn_setstatus
  316. fn_validate
  317. echo ""
  318. echo "Test complete!"
  319. sleep 1
  320. echo ""
  321. echo "5.1 - monitor - online"
  322. echo "================================="
  323. echo "Description:"
  324. echo "run monitor server while already running."
  325. requiredstatus="ONLINE"
  326. fn_setstatus
  327. (fn_monitor)
  328. echo ""
  329. echo "Test complete!"
  330. sleep 1
  331. echo ""
  332. echo "5.2 - monitor - offline - no lockfile"
  333. echo "================================="
  334. echo "Description:"
  335. echo "run monitor while server is offline with no lockfile."
  336. requiredstatus="OFFLINE"
  337. fn_setstatus
  338. (fn_monitor)
  339. echo ""
  340. echo "Test complete!"
  341. sleep 1
  342. echo ""
  343. echo "5.3 - monitor - offline - with lockfile"
  344. echo "================================="
  345. echo "Description:"
  346. echo "run monitor while server is offline with no lockfile."
  347. requiredstatus="OFFLINE"
  348. fn_setstatus
  349. fn_printinfonl "creating lockfile."
  350. date > "${rootdir}/${lockselfname}"
  351. (fn_monitor)
  352. echo ""
  353. echo "Test complete!"
  354. sleep 1
  355. echo ""
  356. echo "5.4 - monitor - gsquery.py failure"
  357. echo "================================="
  358. echo "Description:"
  359. echo "gsquery.py will fail to query port."
  360. requiredstatus="ONLINE"
  361. fn_setstatus
  362. sed -i 's/[0-9]\+/0/' "${servercfgfullpath}"
  363. fn_monitor
  364. echo ""
  365. fn_printinfonl "Reseting ${servercfg}."
  366. fn_install_config
  367. echo ""
  368. echo "Test complete!"
  369. sleep 1
  370. echo ""
  371. echo "6.0 - details"
  372. echo "================================="
  373. echo "Description:"
  374. echo "gsquery.py will fail to query port."
  375. requiredstatus="ONLINE"
  376. fn_setstatus
  377. fn_details
  378. echo ""
  379. echo "Test complete!"
  380. sleep 1
  381. echo ""
  382. echo "================================="
  383. echo "Generic Server Tests - Complete!"
  384. echo "Using: ${gamename}"
  385. echo "================================="
  386. echo ""
  387. sleep 1
  388. fn_printinfo "Tidying up directories."
  389. sleep 1
  390. rm -rfv ${rootdir}
  391. echo "END"
  392. #!/bin/bash
  393. # Teamspeak 3
  394. # Server Management Script
  395. # Author: Daniel Gibbs
  396. # Website: http://gameservermanagers.com
  397. version="040715"
  398. #### Variables ####
  399. # Notification Email
  400. # (on|off)
  401. emailnotification="on"
  402. email="me@Danielgibbs.co.uk"
  403. # Start Variables
  404. updateonstart="off"
  405. # Server Details
  406. gamename="Teamspeak 3"
  407. servername="Teamspeak 3 Server"
  408. servicename="ts3-server"
  409. # Directories
  410. rootdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/ts3server"
  411. selfname="$(basename $0)"
  412. lockselfname=".${servicename}.lock"
  413. filesdir="${rootdir}/serverfiles"
  414. systemdir="${filesdir}"
  415. executabledir="${filesdir}"
  416. executable="./ts3server_startscript.sh"
  417. servercfg="${servicename}.ini"
  418. servercfgdir="${filesdir}"
  419. servercfgfullpath="${servercfgdir}/${servercfg}"
  420. backupdir="${rootdir}/backups"
  421. # Logging
  422. logdays="7"
  423. gamelogdir="${filesdir}/logs"
  424. scriptlogdir="${rootdir}/log/script"
  425. scriptlog="${scriptlogdir}/${servicename}-script.log"
  426. emaillog="${scriptlogdir}/${servicename}-email.log"
  427. scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log"
  428. echo "================================="
  429. echo "Generic Server Tests"
  430. echo "Using: ${gamename}"
  431. echo "================================="
  432. echo ""
  433. sleep 1