2015-06-19 17:48:12 +02:00

135 lines
3.4 KiB
Bash

#!/bin/bash
# ARK: survival evolved manager
#
# Original author: LeXaT
# Maintainer: FezVrasta
if [ "$(id -u)" == "0" ]; then
echo "This script must NOT be run as root" 1>&2
exit 1
fi
# 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);;
*)
echo "use arkmanager <start|stop|restart|install|update|broadcast>"
exit 0
;;
esac
# Global variables
source ~/.arkmanager.cfg
# init
if [ ! -d "$arkserverroot" ]; then
mkdir $arkserverroot
fi
info=""
thejob=""
update=1
timestamp=$( date +%T )
cd $arkserverroot
touch arkversion # If the file doesn't exist
instver=`cat "arkversion"`
cd $steamcmdroot
bnumber=`./$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`
case "$bnumber" in
*$instver*)
update=0
;; esac
# start function
doStart() {
arkserveropts="TheIsland?SessionName=$arkserversession?QueryPort=$arkserverport?ServerPassword=$arkserverpass?ServerAdminPassword=$arkserverapass?listen"
thejob="$arkserverroot/$arkserverexec $arkserveropts"
screen -dmS "$servicename" "$thejob"
echo "$timestamp: start" >> "$logdir/arkserver.log"
}
# stop function
doStop() {
screen -S "$servicename" -p 0 -X stuff "quit$(printf \\r)"
# screen -S "$servicename" -X quit
sleep 30
echo "$timestamp: stop" >> "$logdir/arkserver.log"
}
# install function
doInstall() {
cd $steamcmdroot
./$steamcmdexec +login $steamuser $steampass +force_install_dir "$arkserverroot" +app_update $appid validate +quit
}
# update function
doUpdate() {
if (($update == 1))
then
if [ -f "$arkserverroot/arkupdate.timed" ]
then
doStop
cd $steamcmdroot
./$steamcmdexec +login $steamuser $steampass +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"
mail -a $logdir/update.log -s "Update-Log" $servermail < /dev/null
rm "$arkserverroot/arkupdate.timed"
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"
fi;
}
#broadcast info
doInfo() {
if [ ! -z $1 ]; then
info=$1
fi
screen -S "$servicename" -p 0 -X stuff "broadcast $info $(printf \\r)"
}
# parameter select
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"
;;
install)
doInstall
;;
update)
doUpdate
;;
broadcast)
doInfo $2
;;
*)
echo "use arkmanager <start|stop|restart|install|update|broadcast>"
;;
esac