Script init-prozess unterordnen

EleRas

Newbie
Hi,
Ich habe ein Problem.
Ich kann mich nur per ssh auf einen Server einloggen, und wenn ich dort ein Java-Programm starte, läuft es als Unterprozess vom sshd & bash.
Ausgabe von pstree:
|-sshd-+-sshd-+-bash---java---java---26*[java]
|______| `-sshd
nun ist es so, das dieses Programm weiterlaufen soll, wenn ich die ssh-Sitzung beende. Mittels exec() kann man ja ein Programm dem laufenden Prozess zuordnen, dies wäre in diesem Fall dann ja die bash
Ausgabe von pstree:
|-sshd-+-sshd-+-java---java---26*[java]
|______| `-sshd
Das Problem ist, wenn ich diese Sitzung nun beende, wird der sshd-prozess ebenfalls beendet und hiermit auch das laufende Programm.
Gibt es eine Möglichkeit, das Programm dem init-prozess unterzuordnen, so das es auch nach dem Beenden des sshd weiterläuft?
 

oc2pus

Ultimate Guru
na klar,

in der BEGIN-INIT-INFO Section eines run-scripts sagt man von welche Services vorher gestartet werden müssen.

Beispiel 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

named benötigt vorher network, remote_fs,...

duch den Befehl insserv (oder yast-runlevel-editor) wird ein Startscript eingefügt. Die Nummerierung erfolgt dabei automatisch UND wird auch jedes mal wieder überschrieben. Also keine Experimente mit eigener Nummerierung durchführen. Überlege dir was DEIN Script als Required-Start braucht und trage das dann ein.

Du kannst so ein script durch kopieren eines beliebigen Scripts aus /etc/init.d selber erstellen.

siehe auch man insserv

normalerweise legt SuSE dann noch einen Link an
ln -s /sbin/rc<meinscript> /etc/init.d/<meinscript>

oder

ln -s /usr/sbin/rc<meinscript> /etc/init.d/<meinscript>
 
OP
E

EleRas

Newbie
Danke für die rasche Antwort, ich probier es mal und meld mich dann wieder :)
-- edit---
hm, das erstellt ja ein Startscript, aber das Programm soll nicht immer beim starten von dem Server gestartet werden, sondern nur bei Bedarf.
 

oc2pus

Ultimate Guru
dann aktiviere es nicht im runtime-level-editor

bei bedarf rufst du auf
anmelden ...
rcMeinScript start
abmelden

anmelden
rcMeinScript stop
abmelden

das geht natürlich nur wenn du die links nach /usr/sbin bzw /sbin ertsellt hast
 
OP
E

EleRas

Newbie
Hm, ok, ich hab das grad mal versucht.
Sobald ich das Script dann so starte, kann ich aber nichtmehr auf die Console zugreifen und das Script wird dennoch beendet wenn ich die SSH-Sitzung beende.
 

oc2pus

Ultimate Guru
du musst in deinem rcXXXScript einen dämon-Process starten (schau dir die Beispiele in /etc/init.d an) dann hast du ach wieder Zugriff auf die Konsole.

wenn das zu startende Programm keine Option für dämon-Process hat, dann probier "progname &" ==> programm läuft im Hintergrund.
Evtl musst du das Programm auch als ein bestimmten user starten
(su - paul -s "/bin/bash" -c "/usr/local/bin/myProgramm")

Jetzt läuft dein script im Vordergrund und wenn du es beendest, ist das Programm auch tot. Bzw wenn du dich abmeldes auch.
 

deac

Member
wenns nur darum geht, dass programm zu starten ohne dass es beim auslogen beendet wird, starte es doch einfach so:
Code:
nohup java woswasi &
 
OP
E

EleRas

Newbie
Danke sehr, der Trick mit nohup hat geholfen. Es funktioniert problemlos, solange man das Programm nicht gleichzeitig mit & in den Hintergrund verbannt, was ich immer versucht hatte (Und um ehrlich zu sein grade beim ausprobieren vergessen habe einzutippen *g*)
Vielen Dank übrigends auch an das gesamte Forum, es hat mir schon bei vielen Fragen geholfen, wenn Google schon lange versagt hat, fand die Forumssuche dennoch eine Antwort :)
 
Oben