Zeitgesteuerter Agent

  • Hallo,


    gibt es eine Möglichkeit den Domino-Server dazu zu bewegen zeitgesteuerte Agenten entweder pünktlich zur eingestellten Uhrzeit oder bei Intervallen immer im vorgegebenen Intervall zu starten?


    Ich habe zwei verschiedene Agenten.


    Der erste Agent soll täglich um 0:01 Uhr starten. Startet mal um 0:05, mal um 0:12, mal um 0:16 dann wieder mal um 0:05 aber nie zur vorgegebene Uhrzeit.

    Ist die Vorgegebene Uhrzeit nur ein netter Vorschlag für den Server, den er dann nach eigener Laune erfüllt oder kann man ihn dazu bringen sich an die Zeit zu halten.


    Der zweite Agent soll alle 15 Minuten anlaufen. Machmal dauert's 16 Minuten bis er erneut gestartet wird, mal dauert's 17 Minuten (immer zur selben Sekunde) aber nie wird das Intervall von 15 Minuten eingehalten.


    Die Last auf dem Sever geht gegen Null - man kann also nicht davon ausgehen, die Agenten aufgrund zu hoher Belastung verspätet gestartet werden.


    Ich würde mich freuen wenn mir jemand die Lösung für diese Problem geben könnte.


    Gruß Thorsten



    P.S. zur Zeit behelfe ich mich mit einem Cron-Job (Server läuft auf SLES) der die Agenten vom OS aus antriggert

  • Hallo Thorsten,


    die Startzeiten sind zwar keine "Vorschläge" aber Domino bzw. der Agentmanager sind auch kein Echtzeitsystem. Vielmehr arbeitet der AMgr, wie viele andere Prozesse bei Domino, mit Queues (Warteschlangen), die periodisch (meist 1x je Minute) gepollt werden.


    Eine angegebene Startzeit für einen Agenten sorgt lediglich dafür, dass der Agent von einer Queue in die nächste verschoben und vom nächsten freien Prozess weiter verarbeitet wird. Einige Ereignisse (z.B. "wenn Dokumente erstellt oder geändert wurden") haben standardmäßig sogar konfigurierbare "Sperrfristen" um ein ständiges Dauerauslösen zu unterbinden.


    Es gibt 2 "Bereitschafts"-Queues (Verbose - für Ereignis-gesteuerte Agenten und Scheduled für zeitgesteuerte Agenten) und eine Ausführungs-Queue (Eligible Queue). Jeder Agent, der auf einem Server ausgeführt wird, liegt erst einmal in der V oder S Queue (je nach Typ). Sobald das Ereignis oder die Zeit eintritt wird der Agent in die nächste Queue verschoben bis er in der Eligible-Queue angekommen ist (V => S => E). Dort kümmert sich dann der nächste freie AMgr-Thread um die Abarbeitung in der Reihenfolge des Eingangs. Da die S- und E-Queue periodisch gepollt werden kann es also Minuten dauern, bis die eigentliche Ausführung überhaupt möglich ist - sofern dann auch noch ein Thread zur Bearbeitung frei ist.


    Um zu sehen, welcher Agent sich gerade in welcher Queue befindet kann man an der Konsole folgendes eingeben: tell amgr schedule


    Um also deine Ausgangsfrage kurz und knapp zu beantworten: die einzige Möglichkeit, einen Agenten zu einer bestimmten Zeit auch wirklich zu starten, ist ihn direkt auszuführen (sofern freie Threads vorhanden sind).


    Carsten

  • Hallo Carsten,


    vielen Dank für Deine ausführliche Antwort.

    Ich werde meine Agenten also weiter über meine Cron-Jobs antriggern.

    Mit dem Verfahren habe ich dann Verzögerungen von unter 5 Sekunden, was für meine Anwendung mehr als akzeptabel ist.


    Gruß Thorsten

  • zusätzlich werden Agenten die Periodisch (alle x Minuten) im que erst reingeschoben wenn der vorherige instanz zu ende gegangen ist.

    Wenn ein Agent also alle 15 Minuten laufen SOLLTE, und dessen laufzeit 2 Minuten ist, dann wird der FRÜHESTENS nach 17 Minuten wieder gestartet. Je nachdem wie der Que frei ist (wie oben beschrieben von Carsten).

    Zeit gesteuerte Agenten haben also deren laufzeit als zusätzliche bremse mit drin.

  • Hallo Ronka,


    vielen Dank für Deine Erklärung - das ist nachvollziehbar.

    Jetzt bräuchte ich nur noch eine schlüssige Erklärung warum ein Agent, der zu einer fixen Uhrzeit starten soll sich extrem verspätet (5 - 10 Minuten) - extern aber pünktlich getriggert werden kann.


    Gruß Thorsten

  • kurze antwort: Das kannst du nicht mit einen normale Agent machen wegen den oben beschriebene problemen.


    Lange Antwort: Das kannst du mittels Ping-Pong agenten machen.

    Agent Ping und Pong sind pinzipiell identisch, mit den unterschied das der eine (ping) der andere (pong) aufruft, und umgekehrt.

    Diesen Agent Kontrolliert dann den Zeitpunkt und steuert den Start deiner agent. Dadurch kommt der vorne im Que (im vergleich zu zeit gesteuerte Agenten), und sollte deutlich näher an dein gewünschten Zeitpunkt starten.


    Ich denke das dein ZEITPUNKT (0:01) der Hauptursache der verspätung ist. Wenn du den auf 23:50 Legst, oder auf 0:21, wirst du sicherlich näher dran gestartet bekommen. 0:00 ist so ein "magischen" zeit für domino wo der versucht einiges zu machen, welches dann prio bekommt, und damit der que vom Agent manager warten läßt.