#!/bin/bash # ARK: survival evolved manager # # Original author: LeXaT # Maintainer: FezVrasta, Sispheor # Check the user is not currently running this script as root if [ "$(id -u)" == "0" ]; then echo "This script must NOT be run as root" 1>&2 exit 1 fi #--------------------- # Variables #--------------------- # Global variables source /etc/arkmanager/arkmanager.cfg # Local variables info="" thejob="" timestamp=$( date +%T ) GREEN="\\033[1;32m" RED="\\033[1;31m" NORMAL="\\033[0;39m" #--------------------- # functions #--------------------- function getCurrentVersion(){ # # Return the current version number # cd $arkserverroot touch arkversion # If the file doesn't exist instver=`cat "arkversion"` return $instver } function getAvailableVersion(){ # # Get the current available server version on steamdb # echo "Checking for update, this may take a while" bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | grep -EA 5 "^\s+\"public\"$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -f3 | sed 's/^ //' | cut -c9-14` echo "Available server version: "$bnumber } function isTheServerRunning(){ # # Check id the server process is alive # SERVICE="ShooterGameServer" ps -a | grep -v grep | grep $SERVICE > /dev/null result=$? return $result } function IsTheServerUp(){ # # Check if the server is up and visible in steam server list # If the server is listenning on his port return 0, else return 1 # PORT="7776" lsof -i |grep $PORT > /dev/null result=$? return $result } # To speedup stuff, if you have not specified a command or the command is invalid, we skip everything and just give you the usage message case "$1" in start);; stop);; restart);; install);; update);; broadcast);; status);; *) echo "use arkmanager " exit 0 ;; esac # Global variables source ~/.arkmanager.cfg # init if [ ! -d "$arkserverroot" ]; then mkdir $arkserverroot fi info="" thejob="" patch=1 timestamp=$( date +%T ) cd $arkserverroot touch arkversion # If the file doesn't exist instver=`cat "arkversion"` bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | grep -EA 5 "^\s+\"public\"$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -f3 | sed 's/^ //' | cut -c9-14` if [ "$bnumber" = "$instver" ]; then patch=0 fi # start function doStart() { arkserveropts="TheIsland?QueryPort=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen" thejob="$arkserverroot/$arkserverexec $arkserveropts" screen -dmS "$servicename" $thejob echo "$timestamp: start" >> "$logdir/arkserver.log" tail -n 1 "$logdir/arkserver.log" } # stop function doStop() { read -p "This operation will quit the server without saving, are your really sure?" -n 1 -r if [[ $REPLY =~ ^[Yy]$ ]]; then screen -X -S "$servicename" stuff "^C" sleep 30 echo "$timestamp: stop" >> "$logdir/arkserver.log" tail -n 1 "$logdir/arkserver.log" fi } # install function doInstall() { if [ ! -d "$arkserverroot" ]; then mkdir $arkserverroot fi cd $steamcmdroot ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit } # update function doUpdate() { cd $arkserverroot touch arkversion # If the file doesn't exist instver=`cat "arkversion"` bnumber=`$steamcmdroot/$steamcmdexec +login anonymous +app_info_print "$appid" +quit | grep -EA 5 "^\s+\"public\"$" | grep -E "^\s+\"buildid\"\s+" | tr '[:blank:]"' ' ' | tr -s ' ' | cut -f3 | sed 's/^ //' | cut -c9-14` if ["$bnumber" = "$instver"]; then patch=0 fi if (($patch == 1)) then if [ -f "$arkserverroot/arkupdate.timed" ] then doStop cd $steamcmdroot ./$steamcmdexec +login anonymous +force_install_dir "$arkserverroot" +app_update $appid validate +quit cd $logdir echo "$bnumber" > "$arkserverroot/arkversion" cd $steamcmdroot doStart echo "$timestamp: update to $bnumber complete" >> "$logdir/update.log" if [ $servermail != "" ]; then mail -a $logdir/update.log -s "Update-Log" $servermail < /dev/null fi rm "$arkserverroot/arkupdate.timed" tail -n 1 "$logdir/update.log" else touch "$arkserverroot/arkupdate.timed" info="There is a update for ark, server will restart in 60mins!!!!!" doInfo $info fi; else echo "$timestamp: No update needed." >> "$logdir/update.log" tail -n 1 "$logdir/update.log" fi; } #broadcast info doInfo() { if [ ! -z $1 ]; then info=$1 fi screen -S "$servicename" -p 0 -X stuff "broadcast $info $(printf \\r)" } printStatus(){ if isTheServerRunning ;then echo -e "$NORMAL" "Server running:" "$GREEN" "Yes" else echo -e "$NORMAL" "Server running:" "$RED" "No" fi if IsTheServerUp ;then echo -e "$NORMAL" "Server online:" "$GREEN" " Yes" else echo -e "$NORMAL" "Server online:" "$RED" " No" fi getCurrentVersion echo -e "$NORMAL" "Server version:" "$GREEN" $instver } #--------------------- # Main program #--------------------- case "$1" in start) doStart ;; stop) doStop ;; restart) doStop echo "$timestamp: stop" >> "$logdir/arkserver.log" sleep 60 doStart echo "$timestamp: start" >> "$logdir/arkserver.log" echo "$timestamp: restart" >> "$logdir/arkserver.log" tail -n 1 "$logdir/arkserver.log" ;; install) doInstall ;; update) doUpdate ;; broadcast) doInfo $2 ;; status) printStatus ;; *) echo "use arkmanager " ;; esac