Hallo,
ich benötige einen Lösungsvorschlag.
ich rufe mit einer Java-Webapplikation die auf einem Apache Tomcat läuft eine Unix-Anwendung namens MrBayes auf.
Die Webapplikation soll sobald das Programm sich beendet hat eine Email an eine Adresse versenden. Problem ist wie kann ich feststellen wann das Programm beendet wurde, da die Webapplikation solange offen zu halten, kommt nicht in betracht, da das Programm eine Laufzeit von über einer Woche haben kann. Jetzt ist meine Frage was für eine Routine sollte ich dafür verwenden die dies Übernimmt oder ist dies überhaupt möglich?
Ich hatte ggf überlegt mithilfe eines cronjjobs täglich eine java appliaktion zu starten welche kontrolliert ob im output verzeichnis die Datei des Auftrags 1011 z.b. fertiggestellt ist und das dann diese Java Appliaktion eine standardisierte email mit Dateinahang der datei hat & in eine Datenbank den Auftrag als Fertig markieren lasse und das aktuelle Datum eintragen lasse.
DA diese Daten für eine Zeit von 1 Woche verüfgbar sein sollen.
Das Problem bei meiner cronjob lösung ist, das mrbayes, das shell programm eben, in die datei nach jedem x-ten Durchlauf die Ergebnisse speichert somit existiert die datei bereits seit programm-start und da man nicht sagen kann in welchen zeitabständen das programm einen eintrag in die datei macht muss ich halt irgendwie die laufzeit des programms überwachen können mit der jeweiligen pid, da das programm auch mehrmals ausgeführt werden kann & sogar wird
ich trotz meiner ggf schlechten beschreibung versteht ihr was ich meine. bin lediglich bislang immer ein linux-anwender gewesen und halt noch nie in sachen programmierung darauf gestoßen.
mfg jensa
Shellanwendung laufzeitskontrolle
Shellanwendung laufzeitskontrolle
Nichts bleibt wie es ist, aber alles kommt wieder. (Herrman Hesse)
Die PID kannst du ganz einfach ermitteln und über "ps" kannst du auch sehr einfach feststellen, ob ein Prozeß zu dieser PID existiert:
Gruß
gms
Code: Alles auswählen
gms1 ~ # sleep 20 &
[1] 15765
gms1 ~ # MYPID=$!
gms1 ~ # echo $MYPID
15765
gms1 ~ # ps p "$MYPID" &>/dev/null || echo "programm hat sich beendet"
gms1 ~ #
[1]+ Done sleep 20
gms1 ~ # ps p "$MYPID" &>/dev/null || echo "programm hat sich beendet"
programm hat sich beendet
gms1 ~ #
gms
wäre es dann auch möglich wenn man täglich kontrooliert ob die pid existiert das es dann auch immer der selbe prozess ist?
sprich wie wird das gemacht wenn mehrere prozesse von einem programm offen sind, sodass ich nicht herausfinde ob das programm generell läuft sondern noch der prozess den ich vor 2 tagen gestartet habe?
mfg jensa
sprich wie wird das gemacht wenn mehrere prozesse von einem programm offen sind, sodass ich nicht herausfinde ob das programm generell läuft sondern noch der prozess den ich vor 2 tagen gestartet habe?
mfg jensa
Nichts bleibt wie es ist, aber alles kommt wieder. (Herrman Hesse)
hi,
geht das nicht viel einfacher? deine Webapplikation startet statt
mrbayes ein kleines Script. Dieses startet dann mrbayes genauso
wie vorher. Im Gegensatz zur Webapp beendet es sich aber nicht
gleich. Sobald mrbayes fertig ist, wird die nächste Zeile im Script
ausgeführt und dein Java-Programm für den Mail-Versand gestartet
natürlich mit den passenden Pfaden und Kommandozeilen-Parametern.
geht das nicht viel einfacher? deine Webapplikation startet statt
mrbayes ein kleines Script. Dieses startet dann mrbayes genauso
wie vorher. Im Gegensatz zur Webapp beendet es sich aber nicht
gleich. Sobald mrbayes fertig ist, wird die nächste Zeile im Script
ausgeführt und dein Java-Programm für den Mail-Versand gestartet
Code: Alles auswählen
#!/bin/sh
/usr/local/bin/mb
/usr/local/bin/mail_versand
Beware of programmers who carry screwdrivers.