| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353 |
- #!/bin/bash
- # Just Cause 2
- # Server Management Script
- # Author: Daniel Gibbs
- # Website: http://gameservermanagers.com
- version="150715"
- #### Variables ####
- # Notification Email
- # (on|off)
- emailnotification="off"
- email="email@example.com"
- # Steam login
- steamuser="anonymous"
- steampass=""
- # Start Variables
- updateonstart="off"
- fn_parms(){
- parms=""
- }
- #### Advanced Variables ####
- # Steam
- appid="261140"
- # Server Details
- servicename="jc2-server"
- gamename="Just Cause 2"
- engine="avalanche"
- # Directories
- rootdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
- selfname="$(basename $0)"
- lockselfname=".${servicename}.lock"
- filesdir="${rootdir}/serverfiles"
- systemdir="${filesdir}"
- executabledir="${filesdir}"
- executable="./Jcmp-Server"
- servercfg="config.lua"
- servercfgdir="${filesdir}"
- servercfgfullpath="${servercfgdir}/${servercfg}"
- servercfgdefault="${servercfgdir}/default_config.lua"
- backupdir="${rootdir}/backups"
- # Logging
- logdays="7"
- #gamelogdir="" # No server logs available
- scriptlogdir="${rootdir}/log/script"
- consolelogdir="${rootdir}/log/console"
- scriptlog="${scriptlogdir}/${servicename}-script.log"
- consolelog="${consolelogdir}/${servicename}-console.log"
- emaillog="${scriptlogdir}/${servicename}-email.log"
- scriptlogdate="${scriptlogdir}/${servicename}-script-$(date '+%d-%m-%Y-%H-%M-%S').log"
- consolelogdate="${consolelogdir}/${servicename}-console-$(date '+%d-%m-%Y-%H-%M-%S').log"
- ##### Script #####
- # Do not edit
- fn_runfunction(){
- # Functions are downloaded and run with this function
- if [ ! -f "${rootdir}/functions/${functionfile}" ]; then
- cd "${rootdir}"
- if [ ! -d "functions" ]; then
- mkdir functions
- fi
- cd functions
- echo -e " loading ${functionfile}...\c"
- wget -N /dev/null https://raw.githubusercontent.com/dgibbs64/linuxgsm/master/functions/${functionfile} 2>&1 | grep -F HTTP | cut -c45-
- chmod +x "${functionfile}"
- cd "${rootdir}"
- fi
- source "${rootdir}/functions/${functionfile}"
- }
- fn_functions(){
- # Functions are defined in fn_functions.
- functionfile="${FUNCNAME}"
- fn_runfunction
- }
- fn_functions
- getopt=$1
- fn_currentstatus(){
- pid=$(tmux list-sessions 2>&1 | awk '{print $1}' | grep -Ec "^${servicename}:")
- if [ "${pid}" == "0" ]; then
- currentstatus="OFFLINE"
- else
- currentstatus="ONLINE"
- fi
- }
-
- fn_setstatus(){
- fn_currentstatus
-
- echo""
- echo "Required status: ${requiredstatus}"
- while [ "${requiredstatus}" != "${currentstatus}" ]; do
- fn_currentstatus
- echo -ne "Current status: ${currentstatus}\\r"
- if [ "${requiredstatus}" == "ONLINE" ]; then
- (fn_start > /dev/null 2>&1)
- else
- (fn_stop > /dev/null 2>&1)
- fi
- done
- echo -ne "Current status: ${currentstatus}\\r"
- echo -e "\n"
- echo "Test starting:"
- echo ""
- sleep 0.5
- }
- echo "1.0 - start - no files"
- echo "================================="
- echo "Description:"
- echo "Test script reaction to missing server files."
- requiredstatus="OFFLINE"
- fn_setstatus
- (fn_start)
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "2.0 - install"
- echo "================================="
- echo "Description:"
- echo "install ${gamename} server."
- requiredstatus="OFFLINE"
- fn_setstatus
- fn_autoinstall
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "3.1 - start"
- echo "================================="
- echo "Description:"
- echo "start ${gamename} server."
- requiredstatus="OFFLINE"
- fn_setstatus
- fn_start
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "3.2 - start - online"
- echo "================================="
- echo "Description:"
- echo "start ${gamename} server while already running."
- requiredstatus="ONLINE"
- fn_setstatus
- (fn_start)
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "3.3 - stop"
- echo "================================="
- echo "Description:"
- echo "stop ${gamename} server."
- requiredstatus="ONLINE"
- fn_setstatus
- fn_stop
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "3.4 - stop - offline"
- echo "================================="
- echo "Description:"
- echo "stop ${gamename} server while already stopped."
- requiredstatus="OFFLINE"
- fn_setstatus
- (fn_stop)
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "3.5 - restart"
- echo "================================="
- echo "Description:"
- echo "restart ${gamename}."
- requiredstatus="ONLINE"
- fn_setstatus
- fn_restart
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "3.5 - restart - offline"
- echo "================================="
- echo "Description:"
- echo "restart ${gamename} while already stopped."
- requiredstatus="OFFLINE"
- fn_setstatus
- fn_restart
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "4.1 - update"
- echo "================================="
- echo "Description:"
- echo "check for updates."
- requiredstatus="OFFLINE"
- fn_setstatus
- fn_update_check
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "4.2 - update - change buildid"
- echo "================================="
- echo "Description:"
- echo "change the buildid tricking SteamCMD to update."
- requiredstatus="OFFLINE"
- fn_setstatus
- fn_printinfonl "changed buildid to 0."
- sed -i 's/[0-9]\+/0/' ${filesdir}/steamapps/appmanifest_${appid}.acf
- fn_update_check
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "4.3 - update - change buildid - online"
- echo "================================="
- echo "Description:"
- echo "change the buildid tricking SteamCMD to update server while already running."
- requiredstatus="ONLINE"
- fn_setstatus
- fn_printinfonl "changed buildid to 0."
- sed -i 's/[0-9]\+/0/' ${filesdir}/steamapps/appmanifest_${appid}.acf
- fn_update_check
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "4.4 - update - remove appmanifest file"
- echo "================================="
- echo "Description:"
- echo "removing appmanifest file will cause script to repair."
- requiredstatus="OFFLINE"
- fn_setstatus
- fn_printinfonl "removed appmanifest_${appid}.acf."
- rm --verbose "${filesdir}/steamapps/appmanifest_${appid}.acf"
- fn_update_check
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "4.5 - force-update"
- echo "================================="
- echo "Description:"
- echo "force-update bypassing update check."
- requiredstatus="OFFLINE"
- fn_setstatus
- fn_update_check
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "4.6 - force-update - online"
- echo "================================="
- echo "Description:"
- echo "force-update bypassing update check server while already running."
- requiredstatus="ONLINE"
- fn_setstatus
- fn_update_check
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "4.7 - validate"
- echo "================================="
- echo "Description:"
- echo "validate server files."
- requiredstatus="OFFLINE"
- fn_setstatus
- fn_validate
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "4.8 - validate - online"
- echo "================================="
- echo "Description:"
- echo "validate server files while server while already running."
- requiredstatus="ONLINE"
- fn_setstatus
- fn_validate
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "5.1 - monitor - online"
- echo "================================="
- echo "Description:"
- echo "run monitor server while already running."
- requiredstatus="ONLINE"
- fn_setstatus
- (fn_monitor)
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "5.2 - monitor - offline - no lockfile"
- echo "================================="
- echo "Description:"
- echo "run monitor while server is offline with no lockfile"
- requiredstatus="OFFLINE"
- fn_setstatus
- (fn_monitor)
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "5.2 - monitor - offline - with lockfile"
- echo "================================="
- echo "Description:"
- echo "run monitor while server is offline with no lockfile"
- requiredstatus="OFFLINE"
- fn_setstatus
- fn_printinfonl "creating lockfile."
- date > "${rootdir}/${lockselfname}"
- (fn_monitor)
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
- echo "5.2 - monitor - gsquery.py failure"
- echo "================================="
- echo "Description:"
- echo "gsquery.py will fail to query port"
- requiredstatus="ONLINE"
- fn_setstatus
- port=${port+1}
- (fn_monitor)
- port=${port-1}
- echo ""
- echo "Test complete!"
- sleep 1
- echo ""
|