• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Systemstart- und Herunterfahren-Dienst

Hallo !

Ich habe auf meinem Rootserver Webmin Version 1.150 am laufen und habe, für den Fall das der Server mal ohne mein Wissen vom Provider gebootet werden muß, alle meine Dienste wie z.B. Teamspeak2 Server, Shoutcast Server und Shoutcast Streamer etc. in den "Systemstart- und Herunterfahren-Dienst" eingetragen damit diese beim Systemneustart automatisch alle wieder gestartet werden. Das mit dem Autostart der Dienste funzt auch ohne Probleme, nur laufen diese dann alle als Root. Kann mir bitte jemand sagen wie ich das ändern kann, so daß alle als User "christian" laufen ?

Viele Grüße
Christian
 
trag diese dienste doch in /etc/init.d ein (so ein vorhandenes script kannst du einfach clonen)
Mit yast runlevel-Editor diese Dienste dann aktivieren oder inssrv benutzen.

beim Aufruf des eigentlichen Programms im startscript benutzt du su - christian <prog>
 
Hi !

Also das mit " /etc/init.d" habe ich früher schonmal erfolglos probiert. Es hatte nur den Effekt das ich mich nicht mehr in mein System einloggen konnte weil irgendwelche Programme vor SSH gestartet wurden.

Grüße
Christian
 
das kannst du doch steuern durch die BEGIN INIT INFO

Beispiel named, braucht network remite_fs und syslog vor dem start:

# init.d/named
#
### BEGIN INIT INFO
# Provides: named
# Required-Start: $network $remote_fs $syslog
# Required-Stop:
# Default-Start: 3 5
# Default-Stop:
# Description: Starts internet domain name server (DNS)
### END INIT INFO
 
Ahhh,.... na das schaue ich mir dann nachher nochmal auf meinem Server an.

Danke jedenfalls erstmal.

Grüße
Christian
 
@oc2pus

Wo kommt denn in diesem Startscript aus der "/etc/init.d" der Befehl rein als User christian zu starten und nicht als root ? Mal so zur Info, ich habe ein Debian Woody Linux auf meinem Rootserver und keine Suse mir Yast :) .

Code:
#!/bin/sh
# Teamspeak Server wird automatisch gestartet

case "$1" in
'start')
	#!/bin/bash
	
	cd /home/tss2_rc2
	./teamspeak2-server_startscript start &
	;;
'stop')
	;;
*)
	echo "Usage: $0 { start | stop }"
	;;
esac
exit 0

Viele Grüße
Christian
 
Variante 1:
du packst das in ein script /usr/local/bin/myTeamSpeakServerStart

#!/bin/bash

cd /home/tss2_rc2
./teamspeak2-server_startscript start &

dann führst du in dem init-script
su - christian -c "/usr/local/bin/myTeamSpeakServerStart &"
aus

Variante 2:
su - christian -s "/bin/bash" -c "cd /home/tss2_rc2; ./teamspeak2-server_startscript start &"
im startscript

ob du den "&" brauchst, kann ich nicht sagen. Eher nicht da -c genau ein Kommando startet. Ausprobieren

man su ist dein Freund ;)

mit logger -p local3.info -t "TeamSpeakerServer" kannst du das auch in irgendeinem syslog protokollieren (man logger)

Vergiss auch nicht den Link in /usr/sbin
ln -s /etc/init.d/meinscript /usr/sbin/rcmeinscript

dann kannst du rcmeinscript start bzw stop auch so aufrufen
 
@oc2pus

Warum so kompliziert wenn es auch einfach geht :) .
Ich habe jetzt die relevanten Startscripte in "/etc/init.d", wie in dem Beispiel unten zu sehen, verändert. Nach einem Reboot werden nun automatisch alle meine Shoutcastserver (2), die Shoutcast Streamer (2) und mein Teamspeak Server geladen und als User "christian" ausgeführt.


Code:
#!/bin/sh
# Teamspeak Server wird automatisch gestartet

case "$1" in
'start')
	#!/bin/bash
	
	cd /home/tss2_rc2
	su christian ./teamspeak2-server_startscript start &
	;;
'stop')
	;;
*)
	echo "Usage: $0 { start | stop }"
	;;
esac
exit 0

Danke für die Hilfe !!!!

Grüße
Christian
 
fein freut mich ;)

was war jetz an meinem Vorschlag komplizierter als an deiner Realisiesrung? Oder war das nur eine allgemeine Aussage?

du solltest aber trotzdem -s "/bin/bash" noch dazu packen, manchmal stehen da nämlich auch Befehle welche Eigenschaften einer bestimmten Shell brauchen. Wenn man nur ein Programm aufruft, ist das eher überflüssig ;)

schönen Sontag noch
 
@oc2pus

was war jetz an meinem Vorschlag komplizierter als an deiner Realisiesrung? Oder war das nur eine allgemeine Aussage?

Hehe... ganz einfach. Ich bin ein ziemlicher Linux Noob und frickel mich von einer Aufgabe und deren Lösung zur nächsten. Da ich Linux nur leider nicht rückwärts runterbeten kann habe ich auch erstmal keinen Plan was z.B. der Befehl "su - christian -s "/bin/bash" -c "cd /home/tss2_rc2; ./teamspeak2-server_startscript start &" genau macht. Hingegen ist es (für mich) einfacher "su christian ./teamspeak2-server_startscript start &" zu verstehen ;-) .

Viele Grüße
Christian
 
ok,

Startscripte sollen einfach sein. Deshalb packt man die Logik in ein extra Script und ruft dieses dann einfach auf.

-s "/bin/bash" setzt die Shell für den Befehl
-u name setzt den user für den Befehl

das - in su bedeutet, das die Standardumgebung des users gesetzt wird (Pfade, Sprache etc) ohne den "-" gilt die Umgebung des Aufrufenden weiter. In deinem Fall also dir root-Einstellungen.

So ich hoffe das bringt etwas mehr Licht ins Dunkel.

Aber: Wenns denn geht, viele Wege führen nach Rom und die eigene Erarbeitung prägt sich auch besser ein ;) In diesem Sinne: forsche weiter ..
 
@oc2pus

Sach mal, bekommst Du die Foreneinträge per SMS aufs Handy oder wieso bist Du so schnell mit dem Beantworten ...hehehe... :lol: .

Aber: Wenns denn geht, viele Wege führen nach Rom und die eigene Erarbeitung prägt sich auch besser ein. In diesem Sinne: forsche weiter ..

Genau meine Rede. Solange wie ich in den Tasks meine Programme als User und nicht als Root laufen sehe bin ich beruhigt und zufrieden.

Grüße
Christian
 
nein, ich habe gerade einen anderen Newbie dran und helfe dem seine Installation zu richten..., deshalb sehe ich sofort ob es was neues gibt ;)
 
Sorry, ich muss nochmal was nachfragen......
Ich habe mir jetzt Suse 9.0 auf meinen Rootserver gezogen und die Programme die per Script unter Debian Woody automatisch gestartet wurden tun das unter Suse leider nicht mehr. Jetzt kommt immer so eine blöde Fehlermeldung :

./sc_serv02: ./sc_serv02: cannot execute binary file
./sc_trans02: ./sc_trans02: cannot execute binary file

Aufrufen tue ich sie so im Webmin Menu "Systemstart- und Herunterfahren-Dienste":

Code:
#!/bin/sh
### BEGIN INIT INFO
# Provides: Morlum
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 5
# Description: Startet Morlum Shoutcast Server und Streamer
### END INIT INFO

case "$1" in
'start')
	cd /home/music/morlum
	su christian ./sc_serv02 &
	
	cd /home/music/morlum
	su christian ./sc_trans02 &
	;;
'stop')
	;;
*)
	echo "Usage: $0 { start | stop }"
	;;
esac
exit 0

Wenn ich die Programme normal per Eingabeaufforderung starte funzt es ohne Probleme. Der User "christian" in der Gruppe "user" ist ebenfalls angelegt und die Files sind chmod 755.

Irgendwelche Ideen ???

Grüße
Christian
 
ich glaube zu dem Zeitpunkt wo diese Scripte laufen gibt es einiges noch nicht im Pfad. Die Programme brauchen doch sicherlich noch Bibliotheken.

also probier mal so etwas noch einzufügen in dein script
export PATH=$PATH:/das-christian-verzeichnis/bin
ggfl zusätzlich noch (für *.so Dateien)
export LD_LIBRARY_PATH=....:$LD_LIBRARY_PATH
 
OK, werde ich mal versuchen. Komisch ist es jedoch trotzdem weil meine Shoutcastserver und Streamer zuletzt gestartet werden.

Grüße
Christian
 
Habe die Lösung:

Code:
#!/bin/sh
### BEGIN INIT INFO
# Provides: Morlum
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 5
# Description: Startet Morlum Shoutcast Server und Streamer
### END INIT INFO

case "$1" in
'start')
   cd /home/music/morlum
   su christian -c ./sc_serv02 &
   
   cd /home/music/morlum
   su christian -c ./sc_trans02 &
   ;;
'stop')
   ;;
*)
   echo "Usage: $0 { start | stop }"
   ;;
esac
exit 0

Das "su christian -c ......." ist ausschlaggebend. Man staune wie wichtig so ein kleiner Parameter doch sein kann :) .

Viele Grüße
Christian
 
oh da fiel ihm wie Schuppen aus den Augen... logo;

su - ==> die echte shell des users wird verwendet! damit stimmen auch die Pfade ;)

kleiner Schönheitsfehler: das was nach -c kommt in "" setzen, in deinem Fall nicht wichtig, aber wenn man "prog param1 param2" aufrufen wollte.
also su - -c "prog p1 p2"
 
OK, danke für den Tipp.
Werde es mir merken für das nächste mal. Jetzt bleibt mein Rootserver wie er ist. "Never change a running system" !!! :)

Grüße
Christian
 
Oben