warum hängt script?
-
hallo christoph,
vielen dank. das war sehr ausführlich und vorallem lehrreich. ich gebe zu, dass ich immer verwirrt bin, wann ich welche "" bzw '' und welche () {} etc. setzen muß. da komm ich mit python besser klar. ich habe mir ein tutorial über bash arrays durchgelesen und das glaub ich auch verstanden. aber allein wäre ich da wohl nicht drauf gekommen
dafür schon mal vielen dank!
dann allerdings noch eine letzte frage: das kommando, welches ich absetze, blockiert doofer weise. ich dachte eigentlich, dass ich es mit einem & am ende gelöst bekomme aber dies war ein irrglaube. muß ich nun noch screen dazwischen schalten? schon, oder? wenn ich einlogen will, starten und mich wieder verabschieden möchte, ohne dass das programm beendet wird. oder gibt es da was cooleres als screen??
vielen dank auch hier schonmal im vorraus!
sven_
-
Wenn du dich einloggen, das Programm starten, und dann ausloggen möchtest, ist screen wahrscheinlich eine der besten Lösungen.
Die allersimpelste Lösung wäre, nohup vor den Aufruf zu schreiben. Das führt dazu, dass dein Programm auch nach dem Logout weiterläuft, aber du hast keine Möglichkeit mehr, den Output zu sehen, was du bei screen hast.
-
hallo christoph,
deine Hilfe ist super! danke auf jeden fall schon mal. ein paar probleme hab ich aber noch. ich habe mit nohup und screen rumgespielt und bei beiden wohl noch einen gedankenfehler. das programm, welches ich auf dem anderen rechner starten möchte ist eine testanwendung, welche startet, sockets bindet und dann verkehr generiert bzw. einsammelt. informationen darüber gibt es auf dem monitor aus und schreibt sie in ein log. die log datei reicht mir eigentlich, daher würde nohup reichen. screen wäre eleganter, da ich irgendwann das prog ja auch wieder beenden will ;).
wenn ich allerdings:
ssh -l user HOST_NAME "nohup java /pfad_zum_test_prog/testprog"
aufrufe, blockiert ssh ja dennoch auf dem programm. eigentlich will ich sowas wie &, also starten und vergessen (bzw. später nochmal vorbei schauen). aber so tut dies nicht. ich weiß, dass ich einen simplen anfängerfehler mache, sehe ihn aber leider nicht. hast du einen tip? das wäre cool.
sven_
-
ach man, wie doof!
ssh -l user HOST_NAME "nohup 'java /pfad_zum_test_prog/testprog' &"
ist die lösung. komisch nur, dass ich ohne & am ende einen fehler bekomme im sinne datei nicht vorhanden? mh.
-
und eins noch, wenn ich das ganz über pssh aufrufe, bekomme ich zwar ein success, aber top auf dem zielrechner zeigt keinen laufenden java prozess. mh gibts da nen trick zum debuggen? wie man sieht, woran es happert?
-
sven_ schrieb:
und eins noch, wenn ich das ganz über pssh aufrufe, bekomme ich zwar ein success, aber top auf dem zielrechner zeigt keinen laufenden java prozess. mh gibts da nen trick zum debuggen? wie man sieht, woran es happert?
top zeigt nur so viele Prozesse an, wie "auf den Bildschirm passen". Mit ps -a kannst du alle anzeigen lassen - vielleicht liegt es einfach nur daran?
-
Hallo zusammen,
also ein wenig zweifle ich an mir selbst:
So:
ssh -l jgroups JGroups_1 -A -P "nohup java -jar jgroups/Text/dist/Test.jar"
wird die Test-Anwenduung gestartet, ssh kommt aber nicht aus dem Skript zurück. Als ob also nohup nicht funktionieren würde.
Das selbe Ergebnis ergibt:
ssh -l jgroups JGroups_1 -A -P "nohup java -jar jgroups/Text/dist/Test.jar &"
Irgdwas mach ich definitiv falsch. Aber was? Ich sehe es leider nicht. Ich habe es mit top und ps überprüft. Endweder rennt das Programm, blockiert aber ssh, oder wird nicht ausgeführt. ???
-
http://en.wikipedia.org/wiki/Nohup#Overcoming_hanging
P.S.: Die Ausgabedatei darf natürlich auch /dev/null sein.
-
mein held!
ich hatte es gelesen, aber dachte, da mein prog eh schon nen log schreibt, ist dies nicht nötig! in kombination mit einem & am ende tut es dann auch.
man, schwere geburt! vielen dank. dann probiere ich dass mal in mein skript einzubauen.
gruß
sven_
-
ok, ich brauch doch nochmal hilfe:
wenn ich pssh so starte, klappt es:
COMMAND='nohup java -jar jgroups/Test/dist/Test.jar > nohup.log 2>&1 < /dev/null &'
aber so nicht:
COMMAND='nohup "$@" > nohup.log 2>&1 < /dev/null &'
Im log steht nohup missing operand. Ich vermute, dass ich beim Bash-Array was nicht verstanden habe und deswegen wohl das Kommando falsch übergebe, oder? Noch nen Tip? Wäre sehr cool.
-
aso,
das command setz ich dann ins pssh_command ein, per ${COMMAND[@]} und das pss_command führe ich wie besprochen aus. offensichtlich löst er das array nicht auf, aber wie ist es richtig?
-
ach blind ist der mensch! ich habs. so ist richtig:
COMMAND="nohup "$@" > nohup.log 2>&1 < /dev/null &"
was so ein hochkommata so aus machen kann. vielen dank für eure hilfe!