Prüfen ob Prozess läuft

  • Hallo zusammen,


    gibt es eine Möglichkeit zu prüfen ob auf dem Server auf dem ein periodischer Agent läuft ein spezieller Task also Prozess läuft?
    Ich starte per Lotusscript mit einem Agent eine exe Anwendung/-schnittstelle. Diese läuft eine gewisse Zeit und beendet sich dann. Nach diesem Agent läuft auch ein anderer Agent los. Dieser darf aber erst tätig werden wenn die Anwendung aus dem ersten Agent sich beendet hat. Leider braucht die exe mal länger und mal kürzer.
    Wie kann der zweite Agent prüfen ob die exe „geschlossen“ ist?


    Vielen Dank


    Grüße datkar

  • Kommt drauf an wie du die Anwendung startest, denn das kann ja in einem Agenten synchron und auch asynchron passieren.


    Generell kannst du per Windows/Linux API oder Systembefehle laufende Prozesse prüfen, wenn der Agent die passenden Rechte hat.
    Ist dann halt plattformabhängig.


    Oder aber du implementierst ein sauberes Handling für den Start es Programms, z.B. mit einer Lock-Datei.


    Oder du kombinierst die beiden Agenten.


    Ist schwer ohne genauere Infos zu sagen was der beste Weg ist

  • Ich würde raten es über einen Dokument in der Datenbank zu machen in welches ein Wert steht, mit angabe des Datums des letzten Starts.
    Wenn beide NICHT in der gleiche Datenbank laufen kannst du es aAm einfachsten machen über den Notes.ini des Servers.


    Der erste Agent schreibt UND Löscht den Wert, der 2. Agent Prüft, und kann ggf wenn es zu lange her ist, den wert ebenso löschen und den 2. Agent los legen lassen (falls der erste Agent den wert nicht selber gelöscht hat weil crash oder sonnst was).

  • Die Idee mit einem Dokument über die Datenbank finde ich auch sehr sympathisch.
    Aber woher weiß der zweite Agent ob er den Wert löschen "darf"? Er muss ja prüfen ob der exe-Task auf dem Server noch läuft..


    Da komme ich um die API wahrscheinlich nicht rum, oder? Oder habt ihr hier einen "kleinen" Codeschnipsel?

  • Ist im Grunde nicht weiter schwierig zu verstehen:
    - Task 1 läuft los, legt das Dokument an, setzt den Wert. Task 2 läuft irgendwann auch an, sieht das Dokument, legt sich schlafen.
    - Wenn Task 1 anläuft, das Dokument anlegt und warum auch immer nicht mehr dazu kommt, es wieder zu löschen, kann Task 2 solange nicht anlaufen, bis du dich darum gekümmert hast.
    - Da Task 2 wohl abhängig von der korrekten Ausführung und Beendigung von Task 1 ist, kann er keine Daten verhunzen.


    Den Fehler zu erkennen, ihn zu bewerten und entsprechend danach zu handeln, das ist der Job des Administrators.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Jein, du kannst davon ausgehen das wenn Task 2 heraus findet das task 1 vor X Minuten angefangen hat, und offenbar nie beendet würde, das Task 1 tatsächlich nicht mehr läuft.
    Damit kann Task 2 auf grund der Zeitstempel im angelegten dokument selber entscheiden das er trotzdem los laufen sollte.


    Task 1 sollte sicherlich ebenso nicht starten wenn Task 2 läuft.
    Deshalb würde ich jeweils das GLEICHE dokument immer wieder bearbeiten, und auch in Task 1 kontrollieren ob Task 2 nicht gerade am laufen ist.


    Wie lange einen Agent laufen DARF ist in den Agenten einstellungen geregelt. Dort musste also der Admin nachsehen und den Entwickler Mitteilen wie lange ein Agent tagsüber und nachts laufen darf.


    Mit den Wert kann den X dann dafiniert werden, auch wenn ich den X immer deutlich höher stellen würde als den gelieferten wert.


    Den dran das Task 1 das Dokument erstellen können muss (falls nicht vorhanden), und das Task 2 nur laufen darf wenn das dokument existiert (und es also nicht erstellen sollte).