Autor Thema: Zeitgesteuerten Agenten nicht mehrfach starten  (Gelesen 2839 mal)

DatenDuck

  • Gast
Zeitgesteuerten Agenten nicht mehrfach starten
« am: 09.06.10 - 10:24:40 »
Hallo Leute,

wie kann man verhindern, dass ein zeitgesteuerter Agent nicht mehrfach auf dem selben Server startbar ist?
Das gilt sowohl für den Fall wenn ein Agent sehr lange läuft und den Agent Manager Intervall überschreitet, als auch wenn (aus welchem Grund auch immer) der Agent per "tell amgr run ..." gestartet wird, während bereits eine Instanz läuft.

Ich finde keine Art von "single instance" Option bei einem Agenten, daher schätze/hoffe ich, das lässt sich per Script realisieren.

Vielen Dank schon mal für die Hilfe!

Bis dann,
-Moritz

Offline tfrenz

  • Aktives Mitglied
  • ***
  • Beiträge: 243
  • Geschlecht: Männlich
Re: Zeitgesteuerten Agenten nicht mehrfach starten
« Antwort #1 am: 09.06.10 - 10:51:08 »
Hallo,

ä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.

Gruß
Thomas
Gruß
Thomas

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Zeitgesteuerten Agenten nicht mehrfach starten
« Antwort #2 am: 09.06.10 - 10:51:18 »
Designer-Hilfe, Thema "CodeLock function"
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

DatenDuck

  • Gast
Re: Zeitgesteuerten Agenten nicht mehrfach starten
« Antwort #3 am: 09.06.10 - 13:15:44 »
Sieht ja schon mal gut aus!
Was nur irgendwie hinderlich ist, ist dass CodeLock() bei gesetztem Lock wartet, statt False zurückzugeben. So kann man den Agenten ja nicht abbrechen, sondern man wartet lediglich bis der zur Zeit laufende Agent fertig ist.
Das verhindert zwar, dass der selbe Agent nicht mehrfach läuft, dafür bildet sich eine Warteschlange...

Gibt's da irgend eine Abbruchlösung (oder habe ich das nur noch nicht ganz verstanden mit den Locks)?

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Zeitgesteuerten Agenten nicht mehrfach starten
« Antwort #4 am: 09.06.10 - 13:40:21 »
Ich würde an eine zentrale Stelle den Startzeitpunkt vom Agenten schreiben lassen (z.B. notes.ini, ein Einstellungs- oder Profildokument o.ä.). Als letzte Aktion des Agenten würde ich diesen Eintrag wieder löschen.

Startet der Agent und findet einen Eintrag, wird das Script beendet. Zur Sicherheit würde ich zusätzlich eine Toleranzzeit definieren, z.B. eine Stunde, falls der Agent beim vorigen Lauf abgestürzt ist. Wenn der gefundene Eintrag älter als die Toleranzzeit ist, läuft er trotzdem weiter.

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Zeitgesteuerten Agenten nicht mehrfach starten
« Antwort #5 am: 09.06.10 - 13:53:46 »
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.
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

BigWim

  • Gast
Re: Zeitgesteuerten Agenten nicht mehrfach starten
« Antwort #6 am: 09.06.10 - 14:47:10 »
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.

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

  • Gast
Re: Zeitgesteuerten Agenten nicht mehrfach starten
« Antwort #7 am: 09.06.10 - 15:08:30 »
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)

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.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz