Domino 9 und frühere Versionen > ND6: Entwicklung
Zeitgesteuerten Agenten nicht mehrfach starten
DerAndre:
Also sowas wie ein Semaphor.
Wie wäre es mit einer Datenbank in der 'Laufdokumente' hinterlegt sind.
Beim Start setzt der Agent sein Dokument auf 1 wenn er laufen darf, ansonsten erfolgt der Abbruch des Agenten.
Am Ende wird die Semaphore wieder auf 0 gesetzt.
Dann noch die Zeittoleranz wie von Peter beschrieben.
BigWim:
--- Zitat ---ähnliche Probleme hat man auch, wenn man mehrere Server in einem Cluster hat und im Agenten keinen eindeuteigen Server hinterlegt hat.
Man bedenke das in einem Cluster ein Agent nicht nur auf einen bestimmten Server laufen zu lassen.
--- Ende Zitat ---
Das war mein Problem. Ich habe es über Einstellungsdokumente gelöst - allein mangels wissens um die CodeLock-Funktion.
Darin definiere ich den Servernamen. Vor der eigentlichen Ausführung wird geprüft, ob aktuelle Servername dem Servernamen im Einstellungsdokument übereinstimmt. Ist die Bedingung erfüllt, rennt der Agent los.
Zudem ist dieses Verfahren entsprechend den eigenen Anforderungen erweiterbar, sodass man nicht unbedingt an die Gestaltung ran muß. Mir sind da schon einige Dinge in den Sinn gekommen, die das Testen und Protokollieren vereinfachen können ....
Markus
DatenDuck:
Ich denke, ich bin einen Schritt weiter. (Die Problematik mit dem Cluster stellt sich erst mal nicht, weil es nur darum geht, den selben Agenten nicht auf ein und demselben Server mehrfach laufen zu lassen).
--- Code: ---Dim intStatus As Integer
Dim intLockID As Integer
intLockID = Createlock("Lockerei")
If Codelockcheck(intLockID) = 0 Then
intStatus = Codelock(intLockID)
Else
Print "!!!!!!!!!!!!!!!!!!!!!!!!!!! Agent läuft bereits!!!!!!!!!!!!!!!!!!!!!!!!!!!"
Exit Sub
End If
Print "AGENT Gestartet!"
Sleep(3600)
Print ">>>>>>>>>>>>>>>> AGENT Exit <<<<<<<<<<<<<<<<<<<"
intStatus = Codeunlock(intLockID)
intStatus = Destroylock(intLockID)
--- Ende Code ---
Die einzige Sache die mir hierbei soweit aufgefallen ist, ist dass dieses Verfahren nicht funktioniert wenn der Agent bereits regulär durch den Agent Manager gestartet ist und man den Agenten nun noch mal per tell amgr run anwirft. Das eigentlich bereits gelockte lock (Aus dem regulären Start) wird nicht erkannt wenn der Agent per run ein weiteres Mal gestartet wurde. Führt man tell amgr run aber wiederum mehrfach aus, wird wenigstens sichergestellt das bei dieser Startart der Agent nicht mehrfach gestartet werden kann.
Ich werde noch etwas weiter forschen.
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln