Shellanwendung laufzeitskontrolle

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
jensa
Beiträge: 67
Registriert: 19.07.2005 10:52:21
Wohnort: Kassel
Kontaktdaten:

Shellanwendung laufzeitskontrolle

Beitrag von jensa » 25.08.2007 14:53:58

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
Nichts bleibt wie es ist, aber alles kommt wieder. (Herrman Hesse)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 25.08.2007 16:52:03

Die PID kannst du ganz einfach ermitteln und über "ps" kannst du auch sehr einfach feststellen, ob ein Prozeß zu dieser PID existiert:

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 ~ #
Gruß
gms

Benutzeravatar
jensa
Beiträge: 67
Registriert: 19.07.2005 10:52:21
Wohnort: Kassel
Kontaktdaten:

Beitrag von jensa » 25.08.2007 16:56:19

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
Nichts bleibt wie es ist, aber alles kommt wieder. (Herrman Hesse)

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 25.08.2007 17:04:39

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

Code: Alles auswählen

#!/bin/sh

/usr/local/bin/mb
/usr/local/bin/mail_versand
natürlich mit den passenden Pfaden und Kommandozeilen-Parametern.
Beware of programmers who carry screwdrivers.

Antworten