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

Einfache Frage zum Starten von Skripts

Basti8

Newbie
Hallo.
Hier mal ne (hoffentlich) ziemlich leicht zu beantwortende Frage: Wie kann ich ein Skript in der Shell so starten, dass es weiterläuft, wenn ich die Shell schließe?
Danke
Basti
 

spoensche

Moderator
Teammitglied
Wenn du deine Sitzung nach dfem ausführen des Scripts beenden willst verwendest du nohup.

Code:
nohup script.sh
 
OP
B

Basti8

Newbie
Da kommt leider "nohup: command not found". Falls das damit zu tun hat: es handelt sich hier nicht direkt um eine Shell. Ich greife mit dem Programm "putty" auf eine virtuelle Maschine zu.
 

regexer

Advanced Hacker
Basti8 schrieb:
Da kommt leider "nohup: command not found". Falls das damit zu tun hat: es handelt sich hier nicht direkt um eine Shell. Ich greife mit dem Programm "putty" auf eine virtuelle Maschine zu.
nohup ist eigentlich Standard. Das sollte auch bei der schlanksten Installation (auch in Form einer VM) dabei sein.

Mach mal:
Code:
ls -l /usr/bin/nohup

... Also bei meiner VM ist das binary da. Oder ich verstehe jetzt etwas falsch - möchte ich nicht ausschließen ;)
 
OP
B

Basti8

Newbie
@notoxp: Das Verzeichnis gibt es leider nicht. Man muss dazu sagen, dass es wirklich ein sehr, sehr schlankes und spezialisiertes System ist.

@Grothesk: Was meinst du mit 'screen'-Sitzung und wie mach ich das?

Wird wohl doch komplizierter als ich dachte. Gibts nicht irgendeinen Parameter, den man einfach anhängen kann?
 
OP
B

Basti8

Newbie
Hi RG. bg hab ich schon probiert. Der Job läuft zwar im Hintergrund, ist aber scheinbar immer noch an die Shell gebunden. Wenn ich Putty schließe, wird auch das Ausführen des Hintergrundjobs beendet.
 

regexer

Advanced Hacker
Basti8 schrieb:
@notoxp: Das Verzeichnis gibt es leider nicht. Man muss dazu sagen, dass es wirklich ein sehr, sehr schlankes und spezialisiertes System ist.
Bei dir gibt es /usr/bin nicht? Das ist ja wirklich sehr speziell. :shock: Dann gibt's auch keinen find, gzip, wc, grep usw. auf deinem System, oder?

@Grothesk: Was meinst du mit 'screen'-Sitzung und wie mach ich das?
screen liegt auch unter /usr/bin - zumindest bei mir ...
 
OP
B

Basti8

Newbie
/usr/bin gibts schon, nur /usr/bin/nohup nicht.
ls /usr/bin hat folgendes Ergebnis:

Xvnc killall printf top
[ ldd python tr
cpp lddlibc4 readlink tty
dirname less run_ev_calibrate.sh uniq
du ltrace run_usbdmc_calibrate.sh unzip
ev_calibrate mcookie scp uptime
ev_waittouch md5sum seq usbdmc_init
evstatus me setterm usbdmc_waittouch
find mkfifo ssh watch
free mmmcalibrate ssh-keygen wc
ftp mpage stat which
gdb ncftp strace xterm
gdbserver ncftpget tail yes
gs open tbcalib zip
id passwd telnet zless
kill printenv test
 

regexer

Advanced Hacker
spoensche schrieb:
Was ist das denn für ein spezielles System?
Wollte ich auch gerade fragen. Was muss man bei den Installation auswählen, dass man nicht mal das Utility "grep" installiert? Das liegt nämlich bei mir auch unter /usr/bin und ist in der Auflistung von Basti8 nicht aufgeführt.

Handelt es sich um überhaupt um openSUSE?
 
OP
B

Basti8

Newbie
neinnein, opensuse isses nicht. aber linux, und da es sich hier ja um ein bash-problem handelt, dachte ich, dass das nicht so verschieden sein kann.
 

regexer

Advanced Hacker
Basti8 schrieb:
neinnein, opensuse isses nicht. aber linux, und da es sich hier ja um ein bash-problem handelt, dachte ich, dass das nicht so verschieden sein kann.
Na gut, das einzige, was mir jetzt noch einfällt wäre, SIGHUP manuell zu trappen - also in diesem Fall ins Leere laufen zu lassen. Etwas anderes macht nohup meines Wissens eigentlich auch nicht. trap ist bei meiner bash ein Shell-Builtin. Sollte also gehen.

Weiteres siehe
Code:
man trap
 
OP
B

Basti8

Newbie
man kennt er auch nicht ;-). trap dafür schon. Ich hab einfach mal "trap SIGHUP" eingegeben. Das bringt noch nichts. Kann mir da bitte wer einen passenden Befehl schreiben?
 

regexer

Advanced Hacker
Basti8 schrieb:
man kennt er auch nicht ;-). trap dafür schon. Ich hab einfach mal "trap SIGHUP" eingegeben. Das bringt noch nichts. Kann mir da bitte wer einen passenden Befehl schreiben?
Code:
trap "" 1
Zu Deutsch: Mach nichts, wenn Signal 1 (=SIGHUP) ankommt.

Die Manpages gibt es auch im Internet: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Builtin-Commands
 
OP
B

Basti8

Newbie
Danke soweit.
Das Ganze bringt zwar die Verbesserung, dass, wenn ich mich per "exit" auslogge, das skript weiterläuft, aber wenn ich Putty beende, stoppt es. Hat da wer ne Idee? Wenn nicht schreib ich das mal in ein Putty-Forum (falls es sowas gibt), weil das vermutlich eher ein Putty- als ein Linuxproblem ist.
 

regexer

Advanced Hacker
Basti8 schrieb:
Das Ganze bringt zwar die Verbesserung, dass, wenn ich mich per "exit" auslogge, das skript weiterläuft, aber wenn ich Putty beende, stoppt es.
Wird er wirklich gestoppt (=der Prozess ist noch da, steht aber auf STOP und tut nichts) oder wird er gekillt (=der Prozess existiert nicht mehr)? Ersteres könnte z.B. eine Eingabeaufforderung sein, die er nicht bedienen kann.

Wenn nicht schreib ich das mal in ein Putty-Forum (falls es sowas gibt), weil das vermutlich eher ein Putty- als ein Linuxproblem ist.
Glaube ich ehrlich gesagt nicht. Das hat eher etwas mit dem Prozesshandling zu tun.
 

regexer

Advanced Hacker
Basti8 schrieb:
Der Prozess wird eindeutig gekillt.
Hast du den trap auch in dein Script geschrieben? Falls ja, dann weiß ich's auch nicht, was es sein könnte.

Du könntest natürlich auch alle anderen Signale (von 2-8 und ab 10 aufwärts) trappen, falls irgendein anderes Signal gesendet wird. Aber eine wirlich schlaue Idee ist das nicht. Deswegen meine Empfehlung: Installiere nohup
 
Oben