Teamspeak2 autostart bei reboot aktivieren

anx!ety

New Member
Hallo :)

Habe auf meinem debianEtch4.0 System einen Teamspeak2 Server installiert.
Nun will ich, dass dieser nach einem Reboot automatisch neu gestartet wird.
Habe die Boardsuche bemüht und auch etwas gefunden.

In der Beschreibung hieß es, man solle in /etc/init.d/ dieses Script packen:

Code:
# ! /bin/bash
#
# Modified TeamSpeak 2 server startscript
# Original script written by: pwk.linuxfan 2004
#
# . /etc/rc.d/init.d/functions
#
### BEGIN INIT INFO
# Provides: teamspeak2
# Short-Description: TeamSpeak 2 server
# Description: Start and stop your TeamSpeak 2 server...
### END INIT INFO

# CONFIG SECTION
USER=tss
DIR=/home/tss
# END OF CONFIG SECTION

case "$1" in
                start)
                                if [ -e $DIR/tss2.pid ]; then
                                         echo "tss2.pid already exists...";
                                         echo "Is your TeamSpeak 2 server already running?"
                                         exit 1
                                else
                                         if [ "$UID" = "0" ]; then
                                                         for c in $(seq 1 10); do
                                                                         echo -n "!"
                                                                         sleep 1
                                                         done
                                                         echo !
                                            fi
                                         echo "Starting the Teamspeak 2 Server..."
                                         if [ -e $DIR/server_linux ]; then
                                                         if [ ! -x $DIR/server_linux ]; then
                                                                         echo "server_linux is not executable..."
                                                                         echo "Trying to set it."
                                                                         chmod u+x $DIR/server_linux
                                                         fi
                                                         if [ -x $DIR/server_linux ]; then
                                                                         WD=`pwd`
                                                                         cd $DIR
                                                                         sudo -u $USER $DIR/server_linux -PID=$DIR/tss2.pid
                                                                         cd $WD
                                                         else
                                                                         echo "server_linux is not executable..."
                                                                         exit 4
                                                         fi
                                            else
                                                         echo "Could not find server_linux..."
                                                         exit 5
                                            fi
                                fi
                ;;
        stop)
                                if [ -e $DIR/tss2.pid ]; then
                                         echo -n "Stopping the TeamSpeak 2 server..."
                                         if ( kill -TERM `cat $DIR/tss2.pid` ); then
                                                         for c in $(seq 1 300); do
                                                                         if [ -e $DIR/tss2.pid ]; then
                                                                                         echo -n "."
                                                                                         sleep 1
                                                                         fi
                                                         done
                                            fi
                                         if [ -e $DIR/tss2.pid ]; then
                                                         echo "server does not shutdown cleanly..."
                                                         kill -KILL `cat $DIR/tss2.pid`
                                                         rm $DIR/tss2.pid
                                                         sleep 5
                                            else
                                                         echo "done"
                                            fi
                                else
                                         echo "tss2.pid does not exist...";
                                         echo "Is your TeamSpeak 2 server already stopped?"
                                         #exit 7
                                fi
                ;;
                restart)
                                $0 stop && $0 start || exit 1
                ;;
                status)
                                if [ -e $DIR/tss2.pid ]; then
                                         echo "The TeamSpeak 2 server is running."
                                         exit 0
                                else
                                         echo "The TeamSpeak 2 server is stopped."
                                         exit 3
                                fi
                ;;
                passwords)
                                if [ -e $DIR/server.log ]; then
                                         date=$(cat $DIR/server.log | grep "admin account info: username: admin" | tail -n 1 | sed "s/^\([0-9]\+-[0-9]\+-[0-9]\+ [0-9]\+:[0-9]\+:[0-9]\+\).*$/\1/")
                                         spass=$(cat $DIR/server.log | grep "superadmin account info: username: superadmin" | tail -n 1 | sed "s/^.*username: superadmin password: \([a-z0-9]\+\).*$/\1/")
                                         pass=$(cat $DIR/server.log | grep "admin account info: username: admin" | tail -n 1 | sed "s/^.*username: admin password: \([a-z0-9]\+\).*$/\1/")
                                         echo "Following passwords were generated on $date"
                                         echo "superadmin = \"$spass\""
                                         echo "admin     = \"$pass\""
                                else
                                         echo "server.log not found..." 
                                         exit 1
                                fi
                ;;
                *)
                         echo "Usage: $0 {start|stop|restart|status|passwords}"
                                exit 2
esac
exit 0


Habe nun also folgendes angelegt /etc/init.d/teamspeak2 und dort das script eingefügt.
Nun soll man einen Link in sein DefaultRunlevel packen und das script starten, jedoch wie kann ich das machen?
Ich nutze DebianEtch4.0, da ist mein DefaultRunlevel rc2.d.
Also meine Frage: Wie kann ich den Link in rc2.d packen und das script starten?

Mit freundlichen Grüßen,

anx!ety
 
Hallo,

falls dein Script "tss" heißt z.B. so:
Code:
ln -s /etc/init.d/tss /etc/rc2.d/S99tss

Das wars dann auch schon :-)

Gruß,
Marco

Nachtrag: Stell noch sicher dass dein Script /etc/init.d/tss entsprechende Rechte, z.B. 755, besitzt.
 
Last edited by a moderator:
Unter Debian macht man das eigentlich per

Code:
update-rc.d teamspeak defaults

Dann wird es in alle Runlevels geschrieben. Aber so geht es natürlich auch.
 
Man kann das ganze auch einfach in die /etc/init.d/bootmisc reinpacken ;)
So mach ich es mit den TeamSpeak Servern :P
 
Hallo,

ich möchte auch dies Script verwenden, leider bekomme ich beim starten des Scriptes folgende Meldung:

Code:
ts2@v32367:~/tss2_rc2$ /home/ts2/tss2_rc2/teamspeak2-server_startscript start
Starting the Teamspeak 2 Server...
ts2 is not in the sudoers file.  This incident will be reported.

Wenn ich aber das orignal Script starte gibt es keine Probleme, woran könnte es liegen?

Stefan
 
Ich habe nun

Code:
ts2     ALL = /home/ts2/tss2_rc2/teamspeak-server_starterscript,/home/ts2/tss2_rc2//server_linux,/home/ts2/tss2_rc2//tsserver2.pid

Jetzt versucht er schon mal zu starten, aber dann meckert er dieses:

Sorry, user ts2 is not allowed to execute '/home/ts2/tss2_rc2//server_linux -PID=/home/ts2/tss2_rc2//tsserver2.pid' as ts2 on

Aber ich habe diese doch auch auch erlaubt?!

Stefan
 
Du musst genau den gleichen Befehl im sudoers File angeben. 1:1 mit allen Parametern - dann klappts :)

Gruß,

Marco
 
Also ich habe doch jetzt dieses drin:

Code:
ts2     ALL = /home/ts2/tss2_rc2/teamspeak-server_starterscript start,/home/ts2/tss2_rc2//server_linux -PID=/home/ts2/tss2_rc2//tsserver2.pid
Aber er meckert immer noch
Sorry, user ts2 is not allowed to execute '/home/ts2/tss2_rc2//server_linux -PID=/home/ts2/tss2_rc2//tsserver2.pid' as ts2 on

Was sehe ich da falsch?
 
Hallo,

ich habe da auch mal eine Frage bzw. eher ein Problem den TS in den Autostart zu bekommen.

Mittels
Code:
update-rc.d teamspeak defaults
habe ich den TS in alle Runlevel aufgenommen, alles funktioniert auch korrekt.

Wenn ich den Server zum ersten mal reboote und danach schaue ist der TS auch im Speicher - also alles okay, die pid des TS wurde auch angelegt.
Führe ich danach einen neuen reboot durch wird der TS nicht mehr gestartet - die pid ist vom letzen mal ja noch erhalten und das Script meint dann TS würde schon laufen und startet es nicht mehr - das stimmt aber nicht.

Die /etc/init.d/teamspeak hat CHMOD 755 und die /home/teamspeak/server/ts.pid hat CHMOD 777.

Das Problem liegt also bei der pid - ist diese vorhanden wird der Server nicht gestartet.
Wird die pid beim reboot normalerweise nicht immer gelöscht?

Habe einen vServer mit dem OS Debian 3.1
 
Code:
case "$1" in
start)
if [ -e $DIR/tss2.pid ]; then
echo "tss2.pid already exists...";
echo "Is your TeamSpeak 2 server already running?"
exit 1
else

Das ist im Script so vorgegeben, da steht wenn das Pidfile da ist dann soll sich das Script beenden.

Entweder du löscht die ganzen Zeilen oder du machst:

Code:
case "$1" in
start)
if [ -e $DIR/tss2.pid ]; then
echo "tss2.pid already exists...";
rm $DIR/tss2.pid
else
 
Naja, die Zeilen haben eigentlich schon ihren Sinn... Anstelle des bösen Hacks, wäre es wohl sinnvoller mal nachzuschauen, warum die PID-Datei beim shutdown nicht gelöscht wird -- denn das Script macht das eigentlich automatisch...
Daher vermute ich, dass aus irgendeinem Grund die K-Einträge nicht angelegt wurden (oder wieder gelöscht wurden) und daher das Script beim shutdown nie aufgerufen wird.

Welche Ausgabe produziert denn
Code:
ls -l /etc/init.d/rc?.d/[SK]*teampeak
?

Viele Grüße,
LinuxAdmin
 
Nein die pid wird nicht gelöscht.
Sehr warscheinlcih muss man nur noch den
Script so erweitern das er den Befehl ausführt
Server stopp. Und danach den Server. Da du
den Server nicht starten kannst wenn die pid noch da ist.
 
Also ich habe jetzt in die /etc/init.d das Script vom Threandstrater eingefügt. Hab auch den User und den Pfad angeglichen. Muss ich jetzt noch irgendwas machen, damit Teamspeak bei einen reboot automatisch startet?
 
Einfachste Lösung unter Debian:

Als User, der auch in diesem Falle TS2 ausführen soll:

(als z.B. # su voiceuser)

Code:
# crontab -e

und folgende Zeile einfügen:

Code:
@reboot /pfad/zu/ts2/teamspeak2-server_startscript start
 
Back
Top