Hallo,
ich möchte ein Programm (in meinem Fall TeamSpeakServer) beim booten von Debian 3.1 automatisch starten.
Wie kann ich dies realisieren?
Vielen Dank im Voraus!!!
Gruß
Thomas
Hallo,
ich möchte ein Programm (in meinem Fall TeamSpeakServer) beim booten von Debian 3.1 automatisch starten.
Wie kann ich dies realisieren?
Vielen Dank im Voraus!!!
Gruß
Thomas
Moien
ich möchte ein Programm (in meinem Fall TeamSpeakServer) beim
booten von Debian 3.1 automatisch starten.
Kuck mal ins Verzeichnis /etc/rc2.d. Pass eines der Skripts an.
cu
Moien
Hi,
Kuck mal ins Verzeichnis /etc/rc2.d. Pass eines der Skripts
an.
habe mir mal das Skript von Webmin genommen, welches so aussieht (geht noch weiter, doch unten werden die hier angegebenen Werte als Variablen weiterbenutzt–>vermutlich keine Änderungen nötig!?):
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/share/webmin/miniserv.pl
DAEMONCONF=/etc/webmin/miniserv.conf
NAME=ts2\_rc2 #schon angepasst
DESC=TeamSpeakServer #schon angepasst
NAME
und
DESC
habe ich schon verstanden, doch die 3 Zeilen oben bedeuten ja, dass in diesen ganzen Pfaden etwas liegen muss, doch was?
Muss ich jetzt den Kompletten Programmordner in all die Verzeichnisse kopieren?
bei DAEMON ist hier eine PERL-Datei angegeben, welche es in meinem Programmordner garnicht gibt --> also für TeamSpeak.
Eine CONF-Datei ist ebenfalls nicht vorhanden…
Eigentlich gibt es in dem Ordner eine Datei die
teamspeak2-server\_startscript
heißt, welche ich mit den Parametern start|stop|restart aufrufen kann.
Ist es nicht möglich diesen Befehl irgendwie einfach beim hochfahren einzubinden?
Vielleicht seh’ ich das zu einfach (Windows-geschädigt…)!?
Vielen Dank im Voraus
Gruß
Thomas
cu
Hi,
debianspezifisches kenn ich nicht, aber prinzipiell funktioniert das unter LINUX so:
Beispiel:
/#\> cd /etc/rc.d/rc2.d
/etc/rc.d/rc2.d#\> ls -la
...
S12cups -\> ../cups
...
Du musst also dein Script nach /etc/rc.d/ kopieren und einen (Soft-)Link dorthin erzeugen.
Grüße,
J~
Hallo,
Teamspeak server hat ja eingenes start-stop-Skript dabei. Kopiere das einfach nach /etc/init.d/ und lege dann mit update-rc.de (siehe manpage) die entsprechenden symlinks an, die dafür sorgen, dass es beim booten gestart wird und beim shutdown beendet wird.
Grüße,
Moritz
Hallo,
Teamspeak server hat ja eingenes start-stop-Skript dabei.
Das stimmt, das heißt in diesem Falle
teamspeak2-server\_startscript
Kopiere das einfach nach /etc/init.d/ und lege dann mit
update-rc.de (siehe manpage) die entsprechenden symlinks an,
die dafür sorgen, dass es beim booten gestart wird und beim
shutdown beendet wird.
…gut, soweit hab ichs hinbekommen.
Doch noch 2 Probleme:
Bekomme ich jedes Mal, wenn ich den Rechner hochfahre die Warnung, dass man das Programmm nicht als ROOT starten sollte.
Folglich habe ich mal den Besitzer der Skriptdatei(en) geändert, doch das half nichts --> Wie kann ich das Skript als (speziell dafür angelegter Benutzer) ‚tss‘ (in der gruppe ‚teamspeak‘) dieses Skript starten?
Kommt ebenfalls bei jedem Bootvorgang der Hinweis, dass die Datei
linux_server
(die im entpackten Verzeichnis vorhanden ist) nicht gefunden werden konnte. Wie kann ich das Skript so anpassen, dass er die Datei findet oder wo muss ich die Datei hinlegen dass er sie findet (kann sie ja nicht einfach in /etc/init.d/ legen (((oder?))))?
Hier das Skript (für evtl. Tipps):
!!! Ich möchte hiermit gegen keine Rechte verstoßen o.ä., es geht lediglich um die Lösung meines Problems !!!
#! /bin/bash
# Copyright (c) 2004 TeamSpeak team All rights reserved.
#
# Author: pwk.linuxfan 2004
#
case "$1" in
start)
if [-e tsserver2.pid]; then
echo "tsserver2.pid already exists...server already started ?";
echo "If you are sure the server is not running, delete tsserver2.pid"
exit 1
else
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 teamspeak2 server"
if [-e server\_linux]; then
if [! -x server\_linux]; then
echo "server\_linux is not executable, trying to set it"
chmod u+x server\_linux
fi
if [-x server\_linux]; then
./server\_linux -PID=tsserver2.pid
else
echo "server\_linux is not executable, fix this"
exit 4
fi
else
echo "Couldnt find server\_linux"
exit 5
fi
fi
;;
stop)
if [-e tsserver2.pid]; then
echo -n "stopping the teamspeak2 server"
if ( kill -TERM `cat tsserver2.pid` ); then
for c in $(seq 1 300); do
if [-e tsserver2.pid]; then
echo -n "."
sleep 1
fi
done
fi
if [-e tsserver2.pid]; then
echo "server does not shutdown cleanly - killing"
kill -KILL `cat tsserver2.pid`
rm tsserver2.pid
sleep 5
else
echo "done"
fi
else
echo "tsserver2.pid is missing, no started server ?"
exit 7
fi
;;
restart)
$0 stop && $0 start || exit 1
;;
status)
if [-e tsserver2.pid]; then
echo "the server seems to be running"
exit 0
else
echo "the server seems to be stopped"
exit 3
fi
;;
passwords)
if [-e server.log]; then
date=$(cat 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 server.log | grep "superadmin account info: username: superadmin" | tail -n 1 | sed "s/^.\*username: superadmin password: \([a-z0-9]\+\).\*$/\1/")
pass=$(cat 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, maybe you did not start the server yet ?"
exit 1
fi
;;
\*)
echo "Usage: $0 {start|stop|restart|status|passwords}"
exit 2
esac
exit 0
Vielen Dank für eure Mühe!!!
Gruß
Thomas
Hallo,
- Bekomme ich jedes Mal, wenn ich den Rechner hochfahre die
Warnung, dass man das Programmm nicht als ROOT starten sollte.
Folglich habe ich mal den Besitzer der Skriptdatei(en)
geändert, doch das half nichts --> Wie kann ich das Skript
als (speziell dafür angelegter Benutzer) ‚tss‘ (in der gruppe
‚teamspeak‘) dieses Skript starten?
mit su, siehe unten.
- Kommt ebenfalls bei jedem Bootvorgang der Hinweis, dass die
Dateilinux_server
(die im entpackten Verzeichnis
vorhanden ist) nicht gefunden werden konnte. Wie kann ich das
Skript so anpassen, dass er die Datei findet oder wo muss ich
die Datei hinlegen dass er sie findet (kann sie ja nicht
einfach in /etc/init.d/ legen (((oder?))))?
Das einfachste ist, in das enstsprechende Verzeichnis zu gehen.
#! /bin/bash
Copyright © 2004 TeamSpeak team All rights reserved.
Author: pwk.linuxfan 2004
cd /usr/local/teamspeak
exec su tss
case „$1“ in
start)
if [-e tsserver2.pid]; then
echo „tsserver2.pid already exists…server already started
?“;
echo „If you are sure the server is not running, delete
tsserver2.pid“
exit 1
else
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 teamspeak2 server“
if [-e server_linux]; then
if [! -x server_linux]; then
echo „server_linux is not executable, trying to set it“
chmod u+x server_linux
fi
if [-x server_linux]; then
./server_linux -PID=tsserver2.pid
else
echo „server_linux is not executable, fix this“
exit 4
fi
else
echo „Couldnt find server_linux“
exit 5
fi
fi
;;
stop)
if [-e tsserver2.pid]; then
echo -n „stopping the teamspeak2 server“
if ( kill -TERMcat tsserver2.pid
); then
for c in $(seq 1 300); do
if [-e tsserver2.pid]; then
echo -n „.“
sleep 1
fi
done
fi
if [-e tsserver2.pid]; then
echo „server does not shutdown cleanly - killing“
kill -KILLcat tsserver2.pid
rm tsserver2.pid
sleep 5
else
echo „done“
fi
else
echo „tsserver2.pid is missing, no started server ?“
exit 7
fi
;;
restart)
$0 stop && $0 start || exit 1
;;
status)
if [-e tsserver2.pid]; then
echo „the server seems to be running“
exit 0
else
echo „the server seems to be stopped“
exit 3
fi
;;
passwords)
if [-e server.log]; then
date=$(cat 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 server.log | grep „superadmin account info:
username: superadmin“ | tail -n 1 | sed „s/^.*username:
superadmin password: ([a-z0-9]+).*$/\1/“)
pass=$(cat 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, maybe you did not start the
server yet ?“
exit 1
fi
;;
*)
echo „Usage: $0 {start|stop|restart|status|passwords}“
exit 2
esac
exit 0Vielen Dank für eure Mühe!!!
kein Problem.
Moritz
Hi,
bekomme folgendes Problem wenn ichs wie unten beschrieben mache:
Zuerst mal kommt die Fehlermeldung, dass ich keine Berechtigung hätte die Datei auszuführen
–> Also hab’ ich den besitzer auf tss gesetzt
Dann gings schonmal etwas weiter…
Sobald
exec su tss
ausgeführt wird, wird in der konsole zum benutzer tss gewechselt, aber dann passiert nix mehr.
–> wenn ich dann
sh start
eingebe, will er von mir n passwort für tss…
Ich will ja nicht bei jedem Bootvorgang das PW von tss eingeben müssen nur um tss ausführen zu können…
Wie kann ich den scriptstart ohne pw-eingabe ausführen?
Hab’ ich vielleicht bei der Erstellung des Benutzers ‚tss‘ was falsch gemacht???
–> Hab ihn wie jeden anderen Benutzer erstellt —> kann ihm aber nicht kein passwort zuweisen
Vielen dank für eure Mühe!
Hier noch mal der (leicht geänderte) scriptcode
#! /bin/bash
Copyright © 2004 TeamSpeak team All rights reserved.
Author: pwk.linuxfan 2004
hier den richtigen Pfad angeben
cd /etc/ts2_rc2/
Benutzer wechseln
exec su tss
den Rest hab ich nicht verändert…
case „$1“ in
start)
if [-e tsserver2.pid]; then
echo „tsserver2.pid already exists…server already started
?“;
echo „If you are sure the server is not running, delete
tsserver2.pid“
exit 1
else
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 teamspeak2 server“
if [-e server_linux]; then
if [! -x server_linux]; then
echo „server_linux is not executable, trying to set it“
chmod u+x server_linux
fi
if [-x server_linux]; then
./server_linux -PID=tsserver2.pid
else
echo „server_linux is not executable, fix this“
exit 4
fi
else
echo „Couldnt find server_linux“
exit 5
fi
fi
;;
stop)
if [-e tsserver2.pid]; then
echo -n „stopping the teamspeak2 server“
if ( kill -TERMcat tsserver2.pid
); then
for c in $(seq 1 300); do
if [-e tsserver2.pid]; then
echo -n „.“
sleep 1
fi
done
fi
if [-e tsserver2.pid]; then
echo „server does not shutdown cleanly - killing“
kill -KILLcat tsserver2.pid
rm tsserver2.pid
sleep 5
else
echo „done“
fi
else
echo „tsserver2.pid is missing, no started server ?“
exit 7
fi
;;
restart)
$0 stop && $0 start || exit 1
;;
status)
if [-e tsserver2.pid]; then
echo „the server seems to be running“
exit 0
else
echo „the server seems to be stopped“
exit 3
fi
;;
passwords)
if [-e server.log]; then
date=$(cat 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 server.log | grep „superadmin account info:
username: superadmin“ | tail -n 1 | sed „s/^.*username:
superadmin password: ([a-z0-9]+).*$/\1/“)
pass=$(cat 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, maybe you did not start the
server yet ?“
exit 1
fi
;;
*)
echo „Usage: $0 {start|stop|restart|status|passwords}“
exit 2
esac
exit 0
Vielen Dank für eure Mühe!!!
Gruß
Thomas
Hallo,
Zuerst mal kommt die Fehlermeldung, dass ich keine
Berechtigung hätte die Datei auszuführen
–> Also hab’ ich den besitzer auf tss gesetzt
so sollte es ja auch sein.
Dann gings schonmal etwas weiter…
Sobald
exec su tss
ausgeführt wird, wird in der konsole zum benutzer tss
gewechselt, aber dann passiert nix mehr.
Das sollst du ja auch nicht in der Konsole tippen, sondern in das Start-Stop-Skript schreiben. Zusammen mit dem cd-Befehl.
–> wenn ich dann
sh start
eingebe, will er von mir n passwort für tss…
Das ist merkwürdig und ist bei mir nicht so (ich habe auf einem Debian-Server teamspeak laufen, und starte und stoppe per hand über das entsprechende Skript).
Kann es sein, dass du nicht root warst, als du das Skript ausgeführt hast? nur root kann ohne Passwort den Benutzer wechseln.
Hab’ ich vielleicht bei der Erstellung des Benutzers ‚tss‘ was
falsch gemacht???–> Hab ihn wie jeden anderen Benutzer erstellt —>
Das ist wie?
kann ihm aber nicht kein passwort zuweisen
Wieso nicht? was kommt für eine Fehlermeldung?
Grüße,
Moritz
Hallo,
Zuerst mal kommt die Fehlermeldung, dass ich keine
Berechtigung hätte die Datei auszuführen
–> Also hab’ ich den besitzer auf tss gesetztso sollte es ja auch sein.
Dann hab ich ja mal was richtig gemacht…
Dann gings schonmal etwas weiter…
Sobald
exec su tss
ausgeführt wird, wird in der konsole zum benutzer tss
gewechselt, aber dann passiert nix mehr.Das sollst du ja auch nicht in der Konsole tippen, sondern in
das Start-Stop-Skript schreiben. Zusammen mit dem cd-Befehl.
Ich habs auch in das Script geschrieben (siehe (leicht veränderter) Quellcide))
–> wenn ich dann
sh start
eingebe, will er von mir n passwort für tss…
Das ist merkwürdig und ist bei mir nicht so (ich habe auf
einem Debian-Server teamspeak laufen, und starte und stoppe
per hand über das entsprechende Skript).Kann es sein, dass du nicht root warst, als du das Skript
ausgeführt hast? nur root kann ohne Passwort den Benutzer
wechseln.
Wechseln schon, aber anscheinend nichts als dieser ausführen…
Anmerkung:
Habe das
teamspeak2-server\_startscript
in
ts2\_rc2
umbenannt.
Hier mein Test (mit manueller Ausführung des Scriptes):
user@server:~$ su root
Password:
server:/home/user# su tss
tss@server:/home/user$ cd /etc/init.d
tss@server:/etc/init.d$ sh ts2\_rc2 start
Password:
tss@server:/etc/ts2\_rc2$
Hab’ ich vielleicht bei der Erstellung des Benutzers ‚tss‘ was
falsch gemacht???
-> Hab ihn wie jeden anderen Benutzer erstellt
Das ist wie?
Zuerst habe ichs (da ich noch nicht so erfahren mit der Konsole bin) über die graphische Oberfläche gemacht (KDE->System->Benutzerverwaltung).
Später hab ichs aber auch mit der Konsole versucht…–> Immer das gleiche Problem
kann ihm aber nicht kein passwort zuweisen
-> Ich muss eins festlegen
Wieso nicht? was kommt für eine Fehlermeldung?
„Passwort darf nicht leer sein!“ (ähnliche Meldung in der Konsole).
Noch eine Frage zur Sicherheit (nicht, dass ich einen elementaren Fehler mache):
Inhalt des ts2_rc2-Ordners liegt in /etc/ts2_rc2
Script-Datei liegt in /etc/init.d/
->richtig?
Vielen Dank für deine/eure Mühe!!!
Gruß
Thomas
Hallo,
Das ist merkwürdig und ist bei mir nicht so (ich habe auf
einem Debian-Server teamspeak laufen, und starte und stoppe
per hand über das entsprechende Skript).
Das Script ist IMHO sehr merkwürdig. Es erweckt den Anschein, es sei ein Runlevel-Scipt, welches per init abgegrast wird. Andererseits meckert es, wenn es als root ausgeführt wird. Das ist IMHO ein kaputtes Konzept.
Man sollte das Script so ändern, daß es den Server mit dem User tss startet, dafür aber immer als root aufgerufen werden muß.
Wenn man schon Startscripte unter Debian bastelt, könnte start-stop-daemon helfen, aber auch eine klene Änderung in dem vorgegebenen Script sollte ein konsistentes Verhalten abgeben. Und die dämlichen relativeb Pfadangaben, die hier durchs Forum geistern würde ich komplett einstampfen.
HTH,
Sebastian
Hallo,
Das ist merkwürdig und ist bei mir nicht so (ich habe auf
einem Debian-Server teamspeak laufen, und starte und stoppe
per hand über das entsprechende Skript).Das Script ist IMHO sehr merkwürdig. Es erweckt den Anschein,
es sei ein Runlevel-Scipt, welches per init abgegrast wird.
Andererseits meckert es, wenn es als root ausgeführt wird. Das
ist IMHO ein kaputtes Konzept.Man sollte das Script so ändern, daß es den Server mit dem
User tss startet, dafür aber immer als root aufgerufen werden
muß.Wenn man schon Startscripte unter Debian bastelt, könnte
start-stop-daemon helfen, aber auch eine klene Änderung in dem
vorgegebenen Script sollte ein konsistentes Verhalten abgeben.
Und die dämlichen relativeb Pfadangaben, die hier durchs Forum
geistern würde ich komplett einstampfen.
Leider kenne ich mich bisher noch nicht so gut aus, dass ich das Script so wie du gesagt hast, verändern kann.
SRY.
Vielen Dank für eure Mühe!
Gruß
Thomas
Hallo,
user@server:~$ su root
Password:
server:/home/user# su tss
Das solltest du nicht tun, sondern das startskript als root ausführen. Hab ich das nicht bereits erwähnt?
tss@server:/home/user$ cd /etc/init.d
tss@server:/etc/init.d$ sh ts2_rc2 start
Password:
Klar, als user tss kannst du nicht einfach den via su die Userkennung wechseln. Aber beim booten wird das Skript ja als root ausgeführt.
tss@server:/etc/ts2_rc2$
kann ihm aber nicht kein passwort zuweisen
-> Ich muss eins festlegen
Wieso nicht? was kommt für eine Fehlermeldung?
„Passwort darf nicht leer sein!“ (ähnliche Meldung in der
Konsole).
Aber wenn das Passwort nicht leer sein darf hast du ihm doch eins gegeben, oder?
Noch eine Frage zur Sicherheit (nicht, dass ich einen
elementaren Fehler mache):Inhalt des ts2_rc2-Ordners liegt in /etc/ts2_rc2
Script-Datei liegt in /etc/init.d/
->richtig?
Jain. Für deine Zwecke reicht aber wohl ja als Antwort.
Grüße,
Moritz
Hallo,
Das Script ist IMHO sehr merkwürdig. Es erweckt den Anschein,
es sei ein Runlevel-Scipt, welches per init abgegrast wird.
Andererseits meckert es, wenn es als root ausgeführt wird. Das
ist IMHO ein kaputtes Konzept.
Ist es eindeutig. Deswegen hier ja auch der ganze Aufwand…
Man sollte das Script so ändern, daß es den Server mit dem
User tss startet, dafür aber immer als root aufgerufen werden
muß.
Das sollen die von mir vorgeschlagenen Änderungen ja auch mit minimalem Aufwand bewirken, wenn auch auf recht krude Art und Weise.
Wenn man schon Startscripte unter Debian bastelt, könnte
start-stop-daemon helfen, aber auch eine klene Änderung in dem
vorgegebenen Script sollte ein konsistentes Verhalten abgeben.
Und die dämlichen relativeb Pfadangaben, die hier durchs Forum
geistern würde ich komplett einstampfen.
Dann gib einen konkreten Vorschlag an. Nicht nur das Konzept, sondern lauffähigen Code.
Ich bin auch davon ausgegangen, dass der OP nicht unbedingt eine Debian-orientierte Lösung will, sonst hätte er gefragt wie er sich ein .deb daraus bauen kann (und würde ev. keine closed-source-Software verwenden, aber das ist wieder ein anderes Thema).
Grüße,
Moritz
Hallo,
tss@server:/home/user$ cd /etc/init.d
tss@server:/etc/init.d$ sh ts2_rc2 start
Password:Klar, als user tss kannst du nicht einfach den via su die
Userkennung wechseln. Aber beim booten wird das Skript ja als
root ausgeführt.tss@server:/etc/ts2_rc2$
Das ist ja das Problem --> eben nicht
Er wechselt dann nur zu tss@server:/etc/ts2_rc2$
dann bleibt der Bootvorgang stehen.
Wenn ich dann beim boot versuche, das Script zu starten (wenn er bei dem Pfad stehen geblieben ist (s.o.)) fragt er mich ebenfalls nach PW.
kann ihm aber nicht kein passwort zuweisen
-> Ich muss eins festlegen
Wieso nicht? was kommt für eine Fehlermeldung?
„Passwort darf nicht leer sein!“ (ähnliche Meldung in der
Konsole).Aber wenn das Passwort nicht leer sein darf hast du ihm doch
eins gegeben, oder?
Jo, habe ich.
Noch eine Frage zur Sicherheit (nicht, dass ich einen
elementaren Fehler mache):Inhalt des ts2_rc2-Ordners liegt in /etc/ts2_rc2
Script-Datei liegt in /etc/init.d/
->richtig?Jain. Für deine Zwecke reicht aber wohl ja als Antwort.
K, Danke.
Weihnachtliche Grüße
Thomas