Hallo,
ich möchte in einem Skript ein tail verwenden, um auf ein Ereignis (interaktiv) zu warten. Wenn ich jedoch das Tail mit Strg-C beenden will ("bin fertig"-Nachricht im Logfile gesehen) killt das das ganze Skript. Wie kann man dieses Verhalten ändern?
Skript sieht demomäßig folgendermaßen aus:
sende_stopsignal_an_dienst tail -f logfile starte_dienst
sende_stopsignal_an_dienst arbeitet asynchron, es kehrt gleich zurück. Entsprechend möchte ich im Logfile auf die besagte Meldung warten.
Da es ein paar mehr Dienste sind
Den "beende-dich-wenn-pid_X-stirbt"-Parameter von tail habe ich schon ins Auge gefasst, aber wieder verworfen, weil es bei der Vielzahl der Java-Prozesse (es laufen diverse Dienste dieser Art auf der Kiste) schwer ist, zu identifizieren welcher Prozess der "Masterprozess" eines Dienstes ist.
Hat jemand eine Idee? Wieso bekommen überhaupt beide (tail und das Skript) ein "beende-dich"-Signal (ich hätte gedacht: tail hat das Terminal gerade unter Kontrolle => nur Tail bekommt das Signal zugestellt)?
Vielen dank im Voraus & ein schönes WE noch Fabian
Am 20.07.2008 um 13:21 schrieb Fabian Hänsel:
sende_stopsignal_an_dienst arbeitet asynchron, es kehrt gleich zurück. Entsprechend möchte ich im Logfile auf die besagte Meldung warten.
Wie wäre es mit busy waiting -- ganz ohne "tail -f"?
sende_stopsig_an_dienst while (beendet-meldung nicht im log) sleep 1 starte_dienst
Alternativ DJB's daemontools einsetzen -- m.E.n. sowieso anzuraten. (Dort mit pipes implementiert, wenn ich mich recht erinnere.)
HTH Sebastian -- Jeder ist notwendigerweise der Held seiner eigenen Lebensgeschichte.
Hallo Sebastian,
Am 20.07.2008 um 13:21 schrieb Fabian Hänsel:
sende_stopsignal_an_dienst arbeitet asynchron, es kehrt gleich zurück. Entsprechend möchte ich im Logfile auf die besagte Meldung warten.
Wie wäre es mit busy waiting -- ganz ohne "tail -f"?
Das wäre eine Option. (Allerdings ein klein wenig mehr Arbeit, da die fertig-Meldung ein paar Status-Infos enthält, die nicht immer gleich sind - kann man aber filtern)
sende_stopsig_an_dienst while (beendet-meldung nicht im log) sleep 1 starte_dienst
Alternativ DJB's daemontools einsetzen -- m.E.n. sowieso anzuraten.
Dann müsste ich einen Deamontoolswrapper für diese sich immer mal wieder ändernden Java-Services schreiben, was den Aufwand deutlich erhöhen würde.
Ich hatte eigentlich erwartet/gehofft, dass man diese Signale auf simple Weise auf das Tool "im Vordergrund" beschränken könnte.
Danke & Viele Grüße Fabian
Fabian Hänsel wrote:
Hallo Sebastian,
Am 20.07.2008 um 13:21 schrieb Fabian Hänsel:
sende_stopsignal_an_dienst arbeitet asynchron, es kehrt gleich zurück. Entsprechend möchte ich im Logfile auf die besagte Meldung warten.
Wie wäre es mit busy waiting -- ganz ohne "tail -f"?
Das wäre eine Option. (Allerdings ein klein wenig mehr Arbeit, da die fertig-Meldung ein paar Status-Infos enthält, die nicht immer gleich sind - kann man aber filtern)
Alternativ kannst du das logfile mit multitail anschauen statt mit "tail -f", dann kannst du einfach mit "q" das multitail beenden und dein Skript läuft einfach weiter.
Ciao, Thomas
Thomas Köhler jean-luc@picard.franken.de wrote:
Am 20.07.2008 um 13:21 schrieb Fabian Hänsel:
sende_stopsignal_an_dienst arbeitet asynchron, es kehrt gleich zurück. Entsprechend möchte ich im Logfile auf die besagte Meldung warten.
Wie wäre es mit busy waiting -- ganz ohne "tail -f"?
Das wäre eine Option. (Allerdings ein klein wenig mehr Arbeit, da die fertig-Meldung ein paar Status-Infos enthält, die nicht immer gleich sind - kann man aber filtern)
Alternativ kannst du das logfile mit multitail anschauen statt mit "tail -f", dann kannst du einfach mit "q" das multitail beenden und dein Skript läuft einfach weiter.
Danke! In der Richtung habe ich gar nicht gesucht. Dass das Signal nicht nur an den Prozess im Vordergrund geht kommt mir weiter spanisch vor, aber mein eigentliches Problem ist gelöst.
Vielen Dank & noch ein schönes WE, Fabian
lug-dd@mailman.schlittermann.de