TeamSpeak 3 Server Autostart und Service Skript (LSBInitScript)

  • Hallo,


    heute stelle ich euch mein "init.d" Skript für euren TeamSpeak 3 Server vor. Diese Skripte werden auch oftmals "LSBInitScript" genannt.



    Was macht bzw. kann das Skript?

    • Beim Hochfahren des physikalischen Servers, worauf die TeamSpeak Instanz installiert ist, wird der TeamSpeak Server automatisch gestartet
    • Beim Herunterfahren des physikalischen Servers, wird der TeamSpeak 3 Server ordnungsgemäß gestoppt
    • Das Skript nutzt das "ts3server_startscript.sh" Skript der jeweiligen Instanz, um die Befehle aus zu führen
    • Folgende Befehle sind möglich:

      • Starten des TeamSpeak 3 Servers


        Code
        1. service ts3server start


      • Stoppen des TeamSpeak 3 Servers


        Code
        1. service ts3server stop


      • Neustart des TeamSpeak 3 Servers


        Code
        1. service ts3server restart


      • Status des TeamSpeak 3 Servers


        Code
        1. service ts3server status


    Hinweis: Der Befehl "service" ist nur für den root Benutzer verfügbar.


    Auf folgenden Systemen wurde es aktuell erfolgreich getestet:

    • Debian Wheezy 7.6

    Wenn ihr es benutzen wollt, müsst ihr folgendes machen:

    • Nachfolgenden Quellcode kopieren und auf dem Server unter "/etc/init.d/ts3server" speichern:


      Shell-Script
      1. #!/bin/sh### BEGIN INIT INFO# Provides: ts3server# Required-Start: $local_fs $remote_fs $network $syslog $named# Required-Stop: $local_fs $remote_fs $network $syslog $named# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# X-Interactive: true# Short-Description: TeamSpeak 3 server# Description: Start the TeamSpeak 3 server and associated services# This script will start TeamSpeak 3 server, and possibly all associated services.### END INIT INFODESC="voice server"NAME=ts3serverUSER="teamspeak"SCRIPTNAME="${0##*/}"SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}"ENV="env -i LANG=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"case "$1" in start) echo "Starting $DESC" "$NAME" echo su - $USER -c "./ts3server_startscript.sh start" ;; stop) echo "Stopping $DESC" "$NAME" echo su - $USER -c "./ts3server_startscript.sh stop" ;; status) su - $USER -c "./ts3server_startscript.sh status" exit $? ;; restart) echo "Restarting $DESC" "$NAME" echo su - $USER -c "./ts3server_startscript.sh stop" su - $USER -c "./ts3server_startscript.sh start" ;; *) echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2 exit 3 ;;esacexit 0


    • Skript anpassen


      Code
      1. vim /etc/init.d/ts3server


      USER="teamspeak" => Hier muss der Linux User gesetzt werden, dem die Server-Dateien gehören. Das ts3server_startscript.sh muss hierfür dann im root des Home-Verzeichnisses des entsprechenden Users liegen. Der Rest wird NICHT angefasst!

    • Rechte des Skripts anpassen


      Code
      1. chmod 0755 /etc/init.d/ts3server


    • Skript installieren


      Code
      1. cd /etc/init.d/ && insserv ts3server && cd - > /dev/null
    • Skript testen


      Code
      1. /etc/init.d/ts3server status


      Wenn der Befehl "service" vorhanden ist, könnt ihr natürlich auch folgendes ausführen:

      Code
      1. service ts3server status

    Ich wünsche euch viel Spaß damit! Wenn ihr Fragen oder Probleme habt, kommt einfach auf mich zu. ;)


  • Das Installieren funktioniert nur auf Debian basierten Distributationen, da jede Distributation ein leicht anderes Verfahren hierfür hat. Wenn es den Befehl "insserv" aber auch auf anderen Distributationen gibt, dann sollte das Skript auch dort funktionieren.


    Der Autostart-Mechanismus sollte aber auf allen Linux Distributationen funktionieren.

  • @Ambroseo Du kannst den Server einfach in den "Autostart" Ordner reinpacken und dann sollte er nach jedem Neustart automatisch starten. Ein Skript zum Starten, Stoppen etc. macht bei Windows meiner Meinung nach keinen Sinn, da du den Prozess nur beenden musst.

  • Ich habe so eben mal das Skript aktualisiert und den ersten Beitrag aktualisiert. :)


    Es funktioniert auf einem Debian Wheezy 7.6 einwandfrei - habe es getestet. Würde mich über andere Test-Ergebnisse sehr freuen! :)


    Was auch sehr cool wäre ist, wenn wir es so weiter entwickeln, dass es immer besser und universeller wird. Bin auf euer Feedback gespannt! ;)

  • Hi


    ich bin noch ein anfAnger beim arbeiten mit dem Debian Server und habe gleich zwei Probleme.


    1. Ich bekomme folgende Fehlermeldung beim installieren. Habe einen Debian 7.6 vServer

    Code
    1. root@s17864355:/home/ts3# cd /etc/init.d/ && insserv ts3server && cd - > /dev/nullinsserv: warning: script 'K03iptables' missing LSB tags and overridesinsserv: warning: script 'iptables' missing LSB tags and overridesinsserv: warning: script 'wide-dhcpv6-client' missing LSB tags and overrides


    2. Meine Installation liegt in /home/ts3/teamspeak3-server_linux-amd64. Muss die Installation stattdessen direkt im Ordner ts3 liegen?

    Code
    1. root@s17864355:/etc/init.d# service ts3server status
    2. -su: ./ts3server_startscript.sh: No such file or directory



    vielleicht könnt ihr mir ja helfen.

  • 1. Ich bekomme folgende Fehlermeldung beim installieren. Habe einen Debian 7.6 vServer

    Code
    1. root@s17864355:/home/ts3# cd /etc/init.d/ && insserv ts3server && cd - > /dev/nullinsserv: warning: script 'K03iptables' missing LSB tags and overridesinsserv: warning: script 'iptables' missing LSB tags and overridesinsserv: warning: script 'wide-dhcpv6-client' missing LSB tags and overrides


    Sehr interessant! 8|


    Dieser Fehler bedeutet eigentlich, dass im Skript kein Header gegeben ist und daher kann es nicht eingerichtet werden. Sind in deiner Datei die folgenden Zeilen GANZ OBEN drin?

    Shell-Script
    1. #!/bin/sh### BEGIN INIT INFO# Provides: ts3server# Required-Start: $local_fs $remote_fs $network $syslog $named# Required-Stop: $local_fs $remote_fs $network $syslog $named# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# X-Interactive: true# Short-Description: TeamSpeak 3 server# Description: Start the TeamSpeak 3 server and associated services# This script will start TeamSpeak 3 server, and possibly all associated services.### END INIT INFO


    2. Meine Installation liegt in /home/ts3/teamspeak3-server_linux-amd64. Muss die Installation stattdessen direkt im Ordner ts3 liegen?

    Code
    1. root@s17864355:/etc/init.d# service ts3server status-su: ./ts3server_startscript.sh: No such file or directory


    Ja, okay. Solange das Skript aufgrund des 1. Fehlers nicht installiert/eingerichtet werden konnte, kann es natürlich auch nicht benutzt werden. ;)


    Bevor du den Befehl mit "cd [...] insserv" und so weiter ausführst, musst du die Datei erst noch anpassen. Öffne die Datei mit einem Text-Editor deiner Wahl (z.B. vi, vim oder nano) und ändere folgenden Inhalt...

    Code
    1. ./ts3server_startscript.sh


    zu diesem um:

    Code
    1. ./teamspeak3-server_linux-amd64/ts3server_startscript.sh


    Du musst quasi vor jedem Skript-Aufruf noch "teamspeak3-server_linux-amd64/" hinzufügen, weil du deinen TS Server in einem Unterordner installiert hast und nicht im root-Verzeichnis des Users.

  • Stimmen die Rechte der Datei denn? Sie müsste 0755 haben. Das kannst du dir mit folgendem Befehl dir anzeigen lassen:

    Code
    1. stat /etc/init.d/ts3server


    Der nachfolgende setzt den entsprechenden Wert:

    chmod 0755 /etc/init.d/ts3server

  • Code
    1. File: `/etc/init.d/ts3server'
    2. Size: 1369 Blocks: 8 IO Block: 4096 regular file
    3. Device: 19h/25d Inode: 72778485 Links: 1
    4. Access: (0755/-rwxr-xr-x) Uid: ( 1002/ ts3) Gid: ( 1002/ ts3)
    5. Access: 2014-09-20 15:57:15.000000000 +0200
    6. Modify: 2014-09-20 15:56:36.000000000 +0200
    7. Change: 2014-09-20 15:56:51.000000000 +0200
    8. Birth: -


    Habe jetzt auch schon einmal mit chown und chgrp für verschiedene benutzer getestet das zu installieren. Hat sowohl für root als auch für ts3 (als benutzer) nicht funktioniert.

  • Ich habe das file einfach nur runtergeladen von hier und in das directory /etc/init.d/ gepackt.


  • Okay, das sollte aber eigentlich funktionieren. Ich habe das exakt gleiche System bei mir und ich krieg gar keine Fehlermeldungen bzw. Warnungen.


    Kannst du den "insserv" Befehl bitte nochmal ausführen und dann testen, ob das Skript funktioniert?

    Code
    1. cd /etc/init.d/ && insserv ts3server && cd - > /dev/null


    Code
    1. service ts3server status


    Weil jetzt hast du den Pfad im Skript ja angepasst, daher sollte wenigstens die Funktionalität gegeben sein und er dir zurück melden, ob er läuft oder nicht. Wenn die Warnungen beim insserv Befehl wieder kommen, ignoriere die einfach erstmal. Das Skripte sollte dennoch funktionieren. Ich kann mir nur gerade nicht erklären, warum du die Meldung kriegst und ich nicht... ?(

  • Es wird immer lustiger :D


    Also angepasst hatte ich die Datei ja und nun habe ich den "insserv" Befehl erneut ausgeführt (natürlich wieder mit Fehlern).
    Zunächst hab ich den Server manuell gestartet und konnte per Client auch drauf joinen. Dann habe ich "reboot" eingegeben, um den Server neu zu starten und das Skript zu testen.


    Als er wieder erreichbar war habe ich folgenden Befehl eingegeben

    Code
    1. service ts3server status


    Als anwort habe ich "Server is running" erhalten.
    Wenn ich jetzt aber versuche per Client zu connecten komme ich nicht drauf.


    Ich nutze normaler weise ein Admin-Tool namens YaTQa (
    TeamSpeak Addons
    )
    Dort kann ich mich per Server Admin Query einloggen und Stats vom server sehen. Das lustige hier ist, ich kann mich einwählen sehe dort dann aber das der TS3-Server nicht an ist obwohl mir
    die Debian-Konsole "Server is running" antwortet.


    Das Skript scheint für mich also nicht so zu funktionieren wie es soll. Erst nach manuellem restart vom TS kann ich per Client drauf.


    Ich verzweifel gerade :D
    Ps. Unglaublich vielen Dank für die ganze Hilfe Sebbo

  • Wenn ich das jetzt auf die schnelle richtig sehe zeigt dir das Script nur an ob die Instanze läuft und nicht ob ein Virtueller Server läuft.


    Du musst zwischen diesen beiden Sachen unterscheiden.


    Eine Instanze ist grob gesagt der Root Server der Teamspeak Server auf denen viele Virtuelle Server installiert werden. Der Query ist dabei der Root des Servers und die Server Admins dann die Admins des jeweiligen Virtuellen Servers.


    Das heist es kann sein das die Instanze läuft, dein Virtueller Teamspeak Server aber nicht. Und YATQA wird sich bei dir vermutlich auf die Instanze mittels Server Query einloggen(da du denke ich mal den serveradmin als Query Account genommen hast) und somit funktioniert dein YATQA, dein Virtueller Server jedoch nicht(wenn du dich versuchst drauf einzuloggen).

  • Kannst du dich überhaupt mit dem Client verbinden, wenn du das offizielle ts3server_startscript.sh mal her nimmst und es damit durchführst?


    Also...

    Code
    1. ./ts3server_startscript.sh restart


    ...sollte ja dann zum selben Ergebnis führen, wie...

    Code
    1. service ts3server restart


    ...oder nicht?


    Ansonsten versuche es mal mit diesem Skript:


    Denke dran: insserv nochmal durchführen!

  • Hey nochmal vielen Dank. Es funktioniert irgendwie noch immer nicht ganz.
    Vielleicht hast du ja diese oder die nächste Woche mal Zeit kurz mit mir in einem TS zu sprechen. Das ist vielleicht leichter und geht schneller als alles hier durch zu kauen.


    Bis dahin ;)

  • Vielleicht hast du ja diese oder die nächste Woche mal Zeit kurz mit mir in einem TS zu sprechen.


    Gute Idee. :D


    Am Freitag Nachmittag so gegen 16 Uhr könnte ich es mir mal anschauen, wenn du willst. :)