Gameserver Startscript 19-10-18/13:55

Gameserver Startscript mit SSSR

Startscript für Gameserver mit "Start, Stop, Status, Restart" Funktion. Es kann natürlich auch jede andere Anwendung eingetragen werden, in diesem Beispiel gehen wir aber mal von einem klassischen Quake Server aus. Bitte CHMOD nicht vergessen 

 Synopsis:
- Dienst wird in einem Screen gestartet und es wird ein ".pid" erzeugt
- Mit "status" wird der Dienst automatisch neu gestartet falls das ".pid" nicht mehr exisitent ist
- Logfiles mit Datum und Uhrzeit
- eMail Benachrichtigung

 

Script:
In der Regel muss hier nur der Config Teil angepasst werden.

#!/bin/sh
#
# Script: Daemon Starter
# Original Author: nouseforname/fufi
# Rework: itsjustm3
# Site: itsjustm3.de
# 

#---------- CONFIG START -----------#

# Name des Dienstes
NAME=QWTF

# Kompletter Pfad zur ausführenden Datei
# In unserem Beispiel liegt die Anwendung im Ordner "/quake"
SERVERPATH=/home/USERNAME/quake

# Name der auszuführenden Datei
DAEMON=mvdsv

# Weitere Commandline Befehle
# Leer lassen, falls es keine gibt
OPTIONS="+gamedir fortress -mem 64 -ip 127.0.0.1 -port 27600"

# Pfad für die Logfiles
LOGPATH=/home/USERNAME/quake/logs/

# Suffix für die Logfiles
# Es wird Datum und Uhrzeit angehangen
LOGNAME="_status.log"

# eMail Benachrichtigung (leer lassen falls nicht gewünscht)
EMAIL=USERNAME@TLD.com

#----------- CONFIG END ------------#

PIDFILE=$SERVERPATH/$NAME.pid
DATE=` date +"%H:%M:%S"`
LOGDATE=` date +"%Y-%m-%d"`
OLDDATE=` date -d "7 days ago" +"%Y-%m-%d"`
LOG="$LOGPATH/$LOGDATE$LOGNAME"

case "$1" in
  start)
        echo -n "Starting daemon: "$NAME
        cd /
        cd $SERVERPATH
        screen -Amds $NAME ./$DAEMON $OPTIONS > /dev/null
        sleep 1
        echo ""
        echo -n "Waiting."
        sleep 1
        echo -n "."
        sleep 1
        echo -n "."
        sleep 1
        echo -n "."
        sleep 1
        echo ""
        ps -ef | grep SCREEN | grep "$NAME" | grep -v grep | awk '{ print $2}' > $SERVERPATH/$NAME.pid
        echo "Screen process ID $SERVERPATH/$NAME.pid"
        echo "Done!"
	;;
  stop)
        echo -n "Stopping daemon: "$NAME
	 kill `cat $PIDFILE`
	 rm $PIDFILE
        echo "."
	;;
  restart)
        echo -n "Restarting daemon: "$NAME
        echo ""
        $0 stop
        sleep 1
        echo -n "Waiting."
        sleep 1
        echo -n "."
        sleep 1
        echo -n "."
        sleep 1
        echo -n "."
        sleep 1
        echo "."
        $0 start
	;;
    status)
        if [ -f $PIDFILE ] ; then
		if kill -0 `cat $PIDFILE` 2>/dev/null ; then
                echo "$DATE $NAME is active under pid `cat $PIDFILE`." >> $LOG
				cd /
				if [ -f $LOGPATH/$OLDDATE$LOGNAME ] ; then
				rm $LOGPATH/$OLDDATE$LOGNAME
				fi
		else
		  $0 restart 2>/dev/null
		  echo "$DATE $NAME automatically restarted." >> $LOG
		  if [ $EMAIL ] ; then
		  echo "Restarted $NAME at $DATE." | mail -s "Restarted $NAME $DATE" $EMAIL
				fi
             fi
	  else
		echo "$DATE $NAME stopped by admin." >> $LOG
        fi
        ;;
  *)
	echo "Usage: "$1" {start|stop|restart|status}"
	exit 1
esac
exit 0


Jetzt können wir unseren Dienst mit "./scriptname start" starten. Um zu überprüfen ob der Dienst noch läuft bzw. der Screen noch aktiv ist wird der Parameter "status" angehangen. Falls das .pid File nicht mehr exisitent sein sollte wird automatisch ein Neustart veranlasst. 

Damit das ganze auch komplett automatisiert läuft kann noch ein CRON angelegt werdenbroken heart

# Prüfe mit Status ob der Dameon noch läuft
# Automatischer Restart falls inaktiv

/home/USERNAME/scriptname status
sleep 5