Software > Linux

start script für teamspeak server + teamspeak bulldog

(1/2) > >>

mad1120:
moin leute,
ich hab mir die tage nen Vserver gegönnt auf dem ich nen teamspeak server plus den teamspeak bulldog
(schutz system fürs teamspeak) laufen lassen möchte.

nach anfängliche verständnis prob. sind die prog nun am laufen,
nur muss ich sie leider per hand starten wenn der server neustartet  :(

weshalb ich nun nen keliens startscript für selbig Programme baruche,
welches ich dann in den "autostart" packen kann.

wobei das ganze als eingeschrägter benutzer (usr ts) gestartet werden soll

der teamspeak server liegt in:
/teamspeak/tss_rc2
und wird per
./teamspeak2-server_startscript start   
gestartet

und der bulldog wohnt in:
/teamspeak/bulldog
und wird per
java -jar buldogd.jar
gestartet

würde mich freuen wenn ihr da was basteln könntet
(zu claas und gargamel schiel :engel:)

besten dank im voraus mad1120

EDIT: ich hab was vergessen....

der bulldog läuft nach dem starten weiter (es sind in der sitzung sollange das prog. läuft keine weiteren eingaben möglich.
weshalb der kleine ingentwie gezungen werde muss im hintergrung zu arbeiten.
in der readme datei vom bulldog ist was von nem shell script die rede ???

--- Zitat ---1. Starting
  On most operating system go to the directory where you unpacked the files and run: java -jar bulldogd.jar
  or
    java -cp "bulldogd.jar" org.midlink.applications.ts2svcdaemon.Main
  On Windows you may also use the wrapper by just starting bulldogd.exe
  I also put some linux shell scripts with it which are maybe useful for running it as a daemon in the background.
--- Ende Zitat ---

EDIT2:
hier ist nen script was bei bulldog mit dabei ist (linux-hidden.sh)

--- Code: ---#!/bin/bash

#Sun Java Runtime Environment >= 5.0
JRE="java"
#JRE="/usr/lib/j2re1.5-sun/bin/java"

nohup $JRE -jar bulldogd.jar &
--- Ende Code ---

ich versteh da zwar nur bahnhof, aber vielleicht hilft´s...

Gargamel:

--- Zitat von: mad1120 am 17. Dezember 2008, 22:56:20 ---(zu claas und gargamel schiel :engel:)

--- Ende Zitat ---
Hättest du nicht woanders hinschielen können? ;)
Nagut, ist ja bald Weihnachten...

Quick and Dirty:

--- Code: ---#!/bin/bash

TSUSER=ts
JRE="java"

cd /teamspeak/tss_rc2/
su $TSUSER -c "./teamspeak2-server_startscript start"

cd /teamspeak/bulldog/
su $TSUSER -c "nohup $JRE -jar bulldogd.jar &>/dev/null" &

--- Ende Code ---
Schön ist das nicht, aber es sollte beide Programme als User "ts" im Hintergrund starten (sofern die Rechtevergabe das zulässt).

Sauberer wäre es, wenn man die Dienste einzeln starten und insbesondere auch wieder beenden könnte. Um genau die von dem Script gestarteten Prozesse später zum Beenden wiedererkennen zu können, sollte man sich die PIDs (Prozess-IDs) wegspeichern. Vor dem Starten einens Dienstes wäre es auch nicht verkehrt erstmal zu prüfen, ob der Dienst nicht vielleicht schon läuft. ;)

Was setzt du eigentlich für eine Distribution auf dem Server ein?

mad1120:
hi gargamel,
sorry das ich erste jetzt antworte.
die letzten tage hab ich damit verbracht dem bulldog das laufen bei zu bringen,
das nette prog. wollte einfach keinen kontakt zu meinem ts server aufbauen :motz:

danke für deine mühe, werde das script die nächsten tage mal testen.

ach ja der server läuft der zeit mit debian 4.0,
und per knopfdruck kann´s auch schnell mal ne andere distribution werden (hab ca 8 zur auswahl).

achso,

bezüglich der pid,
der teamspeak server speichert selbige von allein in ner extra datei ab und löscht selbige bei beenden.
wobei er meckert und sich nicht starten läst solange diese datei noch existiert..
weshalb noch ne extra zeile rein müste:
--- Code: ---rm teamspeak.pid
--- Ende Code ---
für den fall falls der server im betrieb abstürzt oder unsauber neu gestartet wird.

EDIT:
mir fällt gearde ein:
die nohup datei sollte vielleicht auch ab und wann mal gelöscht werden...

mad1120:
hi garamel,
hab das script heute versucht zu testen. bloss leider läuft es nicht :cry:

als meldung kommt dies:

--- Code: ---bash: ./ts_start.sh: /bin/bash^M: bad interpreter: Datei oder Verzeichnis nicht gefunden
--- Ende Code ---

wenn ich die ersten beiden zeichen aus dem script entferne (#!)
komme ich nen stück weiter

--- Code: ---: Datei oder Verzeichnis nicht gefunden
: command not found 2:
: command not found 5:
: Datei oder Verzeichnis nicht gefundenss_rc2/
Unbekannte ID: ts
: command not found 8:
: Datei oder Verzeichnis nicht gefundenulldog/
Unbekannte ID: ts
--- Ende Code ---

aber laufen will es dann auch nicht...

EDIT:
hab gerade einen fehler gefunden,
erstelle niemals eine datei unter windows und ervsuche sie unter linux auszuführen...
windows baut einen nämlich lustige zeichen mit ein...

und nen zeichen in dem path hab ich auch noch vergessen zu erwähnen  :redface:

die lösung:

--- Code: ---#!/bin/bash

TSUSER=ts
JRE="java"

cd /teamspeak/tss2_rc2
rm teamspeak.pid
su $TSUSER -c "./teamspeak2-server_startscript start"

cd /teamspeak/bulldog
rm nohup.out
su $TSUSER -c "nohup $JRE -jar bulldogd.jar &>/dev/null" &
--- Ende Code ---

achso neben bei hab ich noch nen schönes tool für die console gefungen (mc)
womit ich dann die windows zugabe zeichen entfernt haben..

jetzt bräuchte ich nur noch hilfe um das script in den auto start zu bekommen *den dackel blick aufsetzt*

Gargamel:
OK, ist eigentlich nicht sonderlich schwierig bei Debian beim booten etwas automatisch zu starten. Ich hole nur erstmal etwas weiter aus, damit du auch verstehen kannst, was da passiert:

Debian benutzt ein Sys-V Init (oder ein daran angelehntes Init-System). "/sbin/init" ist der erste Prozess, der gestartet wird, nachdem der Kernel geladen ist (initrd mal außen vor). Die später im Hintergrund laufenden Dienste werden über die Init-Scripts gestartet. Diese liegen bei Debian im Verzeichnis "/etc/init.d/". Es sind für verschiedene Verwendungszwecke des Betriebssystems unterschiedliche Runlevel vorgesehen, bei Debian wird aber eigentlich nur Runlevel 2 im Normalbetrieb verwendet. Dienste die in allen Runlevels laufen müssen, werden beim booten im Runlevel "S" gestartet.

Die Init-Scripts werden zum starten eines Dienstes mit dem Parameter "start" aufgerufen und zum beenden mit dem Parameter "stop". Wenns nicht ganz sauber sein soll, kann man den Paramter auch ignorieren. Die Init-Scripte liegen bei Debian im Verzeichnis "/etc/init.d/". Im Verzeichnis "/etc/rc2.d/" werden nun alle Init-Scripts verlinkt, deren Dienste im Runlevel 2 gestartet und auch gestoppt werden sollen. Beim Wechsel in das Runlevel (also während dem Bootvorgang) werden alle Scripts gestartet, deren (Link-)Name mit "S" anfängt. Die zwei darauf folgenden Ziffern legen fest, in welcher Reihenfolge die Scripts gestartet werden. Wenn das Runlevel verlassen wird, werden die Scripts, deren Name mit "K" (Kill) beginnt, mit dem Parameter "stop" aufgerufen.

Lange Rede, kurzer Sinn:
1. Kopier dein Script als root nach /etc/init.d/teamspeak.
2. Dann sorge dafür, dass es auführbar ist ("chmod u+rx /etc/init.d/teamspeak").
3. Verlinke es von "/etc/rc2.d/" aus ("cd /etc/rc2.d/; ln -s ../init.d/teamspeak S99teamspeak").

Jedes mal wenn der Rechner gestartet wird, wird als eins der letzten Initscripts nun dein script in Form des Kommandos "/etc/rc2.d/S99teamspeak start" aufgerufen. Das Script startet dann (hoffentlich) die beiden Dienste.

Wenn du das ganze sauberer lösen möchtest, solltest du für beide Dienste je ein eigenes Script erstellen, was dann auch die Parameter "start", "stop" und "restart" abarbeiten können sollte. Die Scripts verlinkst du dann in /etc/rc2.d/ so, dass die Dienste in der richtigen Reihenfolge gestartet werden.

Auch wenn es bei deinen Programmen vielleicht reicht, wenn sie beim herunterfahren von "kill" beendet werden, so ist ein Init-Script was die Parameter "stop" und "restart" beherrscht doch recht praktisch. Man kann nämlich bei Debian z.B. sämtliche Dienste über eben diese Init-Scripts beenden oder neustarten. Mal eben was an der Apache-Konfiguration geändert und der Webserver muss neu gestartet werden? "/etc/init.d/apache restart" -> fertig.

Die Unterscheidung der Parameter kann z.B. so erfolgen:

--- Code: ---#!/bin/bash

function dienst_starten()
{
    # hier die Kommandos zum starten des Dienstes eintragen
}

function dienst_stoppen()
{
    # hier die Kommandos zum stoppen des Dienstes eintragen
}

case "$1" in
    start)
        dienst_starten
        ;;

    stop)
        dienst_stoppen
        ;;

    restart|reload|force-reload)
        dienst_stoppen
        dienst_starten
        ;;

    *)
        echo "Usage: $0 {start|stop|restart}"
esac

--- Ende Code ---

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln