4
0

test.sh 10 KB

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