HowTo: Teamspeak 3 DNS – TSDNS Startscript / Autostartscript

Guten Abend,

wie versprochen die zwei Scripte um TSDNS in den Autostart einzubinden.

Es sind nur 3 kleine Änderungen nötig die ich im Script Fett darstellen werde. Dazu gehe ich später näher ein.

 


tsdns_startscript.sh:


#!/bin/bash
#
# Copyright (c) TeamSpeak Systems GmbH. All rights reserved.
#
### BEGIN INIT INFO
# Provides: tsdnsserver-linux-x86
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: TSDNS Server
# Description: Resolves hostnames to IP and port numbers
### END INIT INFO


if [ -e "tsdnsserver_linux_x86" ]; then
BINARYNAME="tsdnsserver_linux_x86"
else
BINARYNAME="tsdnsserver_linux_x86" #für 64-Bit tsdnsserver_linux_amd64


fi


BINARYPATH="/dir/to/server/tsdns" #richtiges Verzeichnis setzen

cd "${BINARYPATH}"
LIBRARYPATH="$(pwd)"


case "$1" in
start)
if [ -e tsdnsserver.pid ]; then
if ( kill -0 $(cat tsdnsserver.pid) 2> /dev/null ); then
echo "The server is already running, try restart or stop..."
exit 1
else
echo "tsdnsserver.pid found, but no server running. Possibly your previously started server crashed..."
echo "Please view the logfile for details."
rm tsdnsserver.pid
fi
fi
if [ "${UID}" = "0" ]; then
echo "WARNING: For security reasons we advise: DO NOT RUN THE SERVER AS ROOT!!!"
for c in $(seq 1 10); do
echo -n "!"
sleep 1
done
echo "!"
fi
echo "Starting the TSDNS Server."
if [ -e "$BINARYNAME" ]; then
if [ ! -x "$BINARYNAME" ]; then
echo "${BINARYNAME} is not executable, trying to set it..."
chmod u+x "${BINARYNAME}"
fi
if [ -x "$BINARYNAME" ]; then
export LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}"
"./${BINARYNAME}" > /dev/null &
echo $! > tsdnsserver.pid
echo "TSDNS Server started, for details please view the log file..."
else
echo "${BINARNAME} is not exectuable, cannot start TSDNS Server..."
fi
else
echo "Could not find ${BINARYNAME}, aborting..."
exit 5
fi
;;
stop)
if [ -e tsdnsserver.pid ]; then
echo -n "Stopping the TSDNS Server."
if ( kill -TERM $(cat tsdnsserver.pid) 2> /dev/null ); then
for c in $(seq 1 300); do
if ( kill -0 $(cat tsdnsserver.pid) 2> /dev/null ); then
echo -n "."
sleep 1
else
break
fi
done
fi
if ( kill -0 $(cat tsdnsserver.pid) 2> /dev/null ); then
echo "Server is not shutting down cleanly - killing..."
kill -KILL $(cat tsdnsserver.pid)
else
echo "done"
fi
rm tsdnsserver.pid
else
echo "No server runing (tsdnsserver.pid is missing)..."
exit 7
fi
;;
update)
if [ -e tsdnsserver.pid ]; then
echo "Updating the TSDNS Server."
export LD_LIBRARY_PATH="${LIBRARYPATH}:${LD_LIBRARY_PATH}"
"./${BINARYNAME}" --update > /dev/null &
echo "TSDNS Server updated, for details please view the log file..."
else
echo "No server runing (tsdnsserver.pid is missing)..."
exit 7
fi
;;
restart)
$0 stop && $0 start || exit 1
;;
status)
if [ -e tsdnsserver.pid ]; then
if ( kill -0 $(cat tsdnsserver.pid) 2> /dev/null ); then
echo "Server is running."
else
echo "Server seems to have died."
fi
else
echo "No server running (tsdnsserver.pid is missing)..."
fi
;;
*)
echo "Usage: ${0} {start|stop|update|restart|status}"
exit 2
esac
exit 0

 

Das ganze speichern wir wie folgt ab und machen das Script ausführbar:


#touch /dir/to/server/tsdns/tsdns_startscript.sh
#nano /dir/to/server/tsdns/tsdns_startscript.sh
##und das Script mit Strg+C und der rechten Maustaste einfügen
##Strg+O zum Speichern Strg+x zum schließen
#chmod +x /dir/to/server/tsdns/tsdns_startscript.sh

Im ersten Script wird im ersten Teil nach der richtigen Bit-Version geprüft. Solltet ihr einen 64-Bit Server verwenden müsst ihr den Fetten Teil ändern. Habe das ganze Zusätzlich im Script mit # kommentiert.

Zusätzlich müsst ihr bei beiden Bit-Versionen das richtige Verzeichnis setzen.

 

Autostartscript – tsdns


#!/bin/sh
# chkconfig: 2345 99 01
# description: Teamspeak 3 TSDNS-Server
### BEGIN INIT INFO
# Provides: teamspeak3dns
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Teamspeak 3 TSDNS-Server
### END INIT INFO


USER="teamspeak"
DIR="/dir/to/Server" # richtiges Verzeichnis setzen



case "$1" in
start)
su $USER -c "${DIR}/tsdns/tsdns_startscript.sh start"
;;
stop)
su $USER -c "${DIR}/tsdns/tsdns_startscript.sh stop"
;;
restart)
su $USER -c "${DIR}/tsdns/tsdns_startscript.sh restart"
;;
status)
su $USER -c "${DIR}/tsdns/tsdns_startscript.sh status"
;;
*)
echo "Benutze: `basename $0` {start|stop|restart|status}" >&2
exit 1
;;
esac
exit 0


Speichern in /etc/init.d und ausführbar machen:


#touch /etc/init.d/tsdns
#nano /etc/init.d/tsdns
##und das Script mit Strg+C und der rechten Maustaste einfügen
##Strg+O zum Speichern Strg+x zum schließen
#chmod +x /etc/init.d/tsdns

Im zweiten Script das selbe Spiel, checken ob die Verzeichnisse stimmen und fertig. Auch hier Fett.

Zum Schluss noch:


#cd
#cd /etc/init.d
update-rc.d tsdns defaults

…und fertig.

~ Alex

5 thoughts on “HowTo: Teamspeak 3 DNS – TSDNS Startscript / Autostartscript

  1. vielen vielen Dank!! …war schon am Verzweifeln da man nirgends ein Script dieser Art findet.

    liebe Grüße Paul

  2. Hello there! This is my first visit to your blog!
    We are a group of volunteers and starting a new initiative in a
    community in the same niche. Your blog provided us useful information to work on.
    You have done a marvellous job!

    • Thank you very much for your comment! 🙂

      If you need any further information about Teamspeak or Linux (or a translation in english) do not hesitate to contact me.

      Yours sincerely,
      Alexander Krischan

  3. Hallo,

    super Script. Danke für deine Arbeit.
    Ich nutze es seit kurzem.
    Ich würde gerne den TSDNS Dienst regelmässig neustarten lassen zum Beispiel über Cronjobs. Wie müsste ich das machen?
    Der Cronjob müsste prüfen ob der TSDNS Dienst läuft oder nicht. Ihn dan starten oder neustarten bzw updaten.

    LG Dennis

    • Hallo Dennis,

      Vielen Dank.
      Zum Beispiel kannst du in der /etc/crontab folgende Zeile einfügen:

      5 0 * * * teamspeakuser ./path/to/tsdns/tsdnsserver_linux_x86 --update
      

      (für 64-Bit anpassen)
      Damit wird der Dienst jeden Tag um 0:05 upgedatet. Neustarts gehen dann ganz einfach mit dem Script:

      5 0 * * * teamspeakuser service tsdns restart
      

      LG Alex

Leave a Reply

Your email address will not be published. Required fields are marked *