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 werden
# Prüfe mit Status ob der Dameon noch läuft
# Automatischer Restart falls inaktiv
/home/USERNAME/scriptname status
sleep 5