Autor Thema: Einen periodischen Agent ohne AMgr starten?  (Gelesen 4139 mal)

Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Einen periodischen Agent ohne AMgr starten?
« am: 02.02.06 - 11:05:42 »
Gibt es eine Möglichkeit,
einen bestimmten Agenten in einer bestimmten Datenbank periodisch zu starten,
auf einem Server wo der Agent manager task NICHT läuft ?


Hintergrund:

Auf einem Backupserver (einem Domino-Server, der Datenbanken von mehreren anderen Domino-Servern repliziert)
ist der Agent Manager mit Absicht deaktiviert, so dass keinerlei Hintergrundagenten in den Datenbanken auf dem Backupserver ausgeführt werden.


Nun gibt es eine spezielle Datenbank auf dem Backup-Server (die nicht repliziert wird),
in welcher ein bestimmter Agent nun doch einmal täglich laufen soll.

Aber wie - ohne Agent manager task ?


Mit einem "Tell Amgr Run 'DatabaseName.nsf 'AgentName'" komme ich auch nicht weiter, da hierfür der AMgr task bereits laufen muß.


Was nicht in Frage kommt:

Ein entfernter Aufruf von einem Script-Agenten auf einem anderen Server, auf dem der Agent manager task läuft, ist hierfür nicht so optimal, da der Agent ca. 2 Stunden läuft und das aufrufende Script auf dem aufrufenden Server wahrscheinlich so lange offen bleibt...


Die Agenten in den Datenbanken können auch nicht auf einen bestimmten festen Servernamen eingestellt werden, womit man den Agent manager task auf dem Backup aktivieren könnte...

Hat jemand eine Idee,
oder ein Tool oder sonst einen Ansatz... ?

Gruß,
Uwe

Offline Steve_O.

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 857
  • Geschlecht: Männlich
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #1 am: 02.02.06 - 11:13:01 »
Du könntest die Tasks in eine txt packen und dem Server über ein Programm-Dok mitgeben:

load amgr
tell amgr run...
tell amgr q
"Wir können Probleme nicht mit dem Denken lösen,
das zu ihnen geführt hat." ( A. Einstein )
________

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #2 am: 02.02.06 - 11:14:41 »
Spontan würde mir nur ein ServerAddin einfallen, welches periodisch den Agenten in der Datenbank antriggert ...
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #3 am: 02.02.06 - 11:16:15 »
Zitat
Du könntest die Tasks in eine txt packen und dem Server über ein Programm-Dok mitgeben:

load amgr
tell amgr run...
tell amgr q

Der Agent läuft aber lt. Uwe 2 Stunden; und wenn du den amgr startest, dann rennen auch alle anderen Agenten los ...
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline DigitDani

  • Senior Mitglied
  • ****
  • Beiträge: 466
  • Geschlecht: Männlich
    • panagenda
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #4 am: 02.02.06 - 11:16:27 »
Hallo Uwe,

währe es eine Lösung den Amgr auf dem Backupserver laufen zu lassen und in allen DBs in denen die Agenten nicht laufen dürfen, über die DB Properties die Hintergrundagenten zu deaktivieren?
Meines Wissens und nach kurzen Tests, wird diese Property nicht repliziert, so dass die Agenten auf den Servern auf denen sie laufen sollen, weiterhin laufen dürften.

cu

Daniel
Viele Grüße
Daniel

Glombi

  • Gast
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #5 am: 02.02.06 - 11:25:59 »
Ich würde eine spezielle Notes-ID genieren und im Serverdokument des Backup-Servers eintragen, dass nur diese ID eingeschränkte, uneingeschränkte und Einfache Aktionen/Formelsprachen Agenten ausführen darf. Das wird im 2. Tab  "Sicherheit" des Serves eingestellt.

Diese ID muss dann den Agenten unterzeichnen, der auf dem Backup-Server laufen soll.

Andreas
« Letzte Änderung: 02.02.06 - 11:38:06 von Glombi »

Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #6 am: 02.02.06 - 12:15:34 »
Wau, danke.
Das sind ne ganze Menge Ansätze, die wir jetzt der Reihe nach prüfen werden

#1 Steve und #3 Eknori:

Zitat
Der Agent läuft aber lt. Uwe 2 Stunden; und wenn du den amgr startest, dann rennen auch alle anderen Agenten los ...

Möglicherweise nicht, wenn man dem AMgr nur EINE Executive gibt...
dann kann er immer nur 1 Agent gleichzeitig ausführen

Aber:
die Textdatei

Zitat
load amgr
tell amgr run...
tell amgr q

heißt das wirklich, dass der AMgr mit der ersten Zeile geladen wird,
dann mit der zweiten Zeile den Agenten ausführt, wartet
und sofort nach Abschluss des Agenten mit der dritten Zeile sich selbst wieder closed...

Das wäre genial - ich kanns nur noch nicht ganz glauben, muss ich testen
Oder wartet er nicht und entlädt sich sofort wieder...


#4 Daniel:
Das würde in unserem Fall leider zu viel "Handarbeit" bedeuten.
Die Datenbanken werden automatisch auf den Backupserver übertragen und es sind mehrere Hundert. Die Replikation ist so eingestellt, dass der Backupserver nur lesen darf und immer alles von der Originaldatenbank auf einem 1:1 Stand hält, so dass man im Ernstfall mit einem Mausklick wieder zurücksichern kann.
Unterschiede in den Datenbanken (auch wenn es nur Properties sind) sind in unserem Fall leider nicht handelbar.

#5 Glombi
Das würde gehen...

Mhhm,
das hieße, der AMgr task läuft permant und versucht alle Agenten in einigen hundert Datenbanken periodisch auszuführen. Darf das aber nicht.
Und nur, wenn er auf die eine Datenbank trifft, wo der Agent mit einer bestimmten ID unterzeichnet ist, darf er dann auch wirklich mal was machen...
Warum eigentlich nicht...
aber hagelt es da nicht möglicherweise permanent Fehlermeldung ohne Ende ?

Gruß,
Uwe

Glombi

  • Gast
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #7 am: 02.02.06 - 12:20:25 »
Durch die NOTES.INI Einstellung
 Log_AgentManager=0
kannst Du Meldungen des Agent Managers unterdrücken.

In Deinem Agent würde ich Print Anweisungen einbauen, damit Du siehtst, ob und was der eine Agent macht.

Andreas

Offline datenbanken24

  • Senior Mitglied
  • ****
  • Beiträge: 390
  • Geschlecht: Männlich
  • Stammgast
    • datenbanken24
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #8 am: 03.02.06 - 02:17:29 »
@Glombi:

Dein Ansatz funktioniert praktisch einwandfrei.

Und trotzdem stehen mir die Haare bei dieser Sache zu Berge,
(zumindest die paar, die ich noch habe) und rollen sich mir die Fingernägel hoch.

EIN Agent soll laufen, dafür muß ich 1.000 Agenten "starten" und absichtlich in täglich 1.000 Fehlermeldungen laufen lassen. Damit ich die Fehlermeldungen nicht sehe, vergewaltige ich noch schnell das Heiligtum notes.ini , so dass mir das System keine Fehlermeldungen mehr bringt - die eigentlich von der Sache her oft sehr nützlich sind und sinnvoll, sie zu lesen.

Das ist mir irgendwie ne Nummer zu krass. Wahrscheinlich bin ich zu weich...
Wenn's doch nur nicht die einzige Lösung wäre...

@Steve
Die Idee gefällt mir so gut - die ist so schön einfach und sauber -
aber ich bekomme das beim besten Willen nicht hin, was Du meinst.

Zitat
Du könntest die Tasks in eine txt packen und dem Server über ein Programm-Dok mitgeben:

load amgr
tell amgr run...
tell amgr q

Ich schaff' das nicht.
Wie muß man das denn eingeben?
Wie gebe ich denn diese Textdatei als program document an?
Hab ziemlich viel versucht, die halbe Nacht, aber außer Fehlermeldungen nix hinbekommen.
Geht das wirklich - und wenn ja, wie?

Gruß,
Uwe


Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #9 am: 03.02.06 - 07:17:29 »
ich würde den Ansatz mit dem Server-Addin weiter verfolgen. Schau dir dazu mal die AgentRunner-Demo von jNotes an.
Gerade bei 2h Laufzeit kann man hier vielleicht mit runjava und evt. mehreren Threads arbeiten.

Du musst bloß auf Speicherlecks achten. Ich hatte ein winzig kleines Löchlein in meinem ersten Wurf. Da aber das Addin kontinuierlich lief hat es irgendwann den Server mitgenommen.  >:D
Ich hatte im Falle einer Exception nicht ordentlich aufgeräumt, so sammelte sich immer mehr an  :-X
« Letzte Änderung: 03.02.06 - 07:20:45 von mt69clp »
sagt Mark.



slowfood.de

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #10 am: 03.02.06 - 07:31:03 »
Die TriggerHappy Geschichte hat auch einen gewissen Charme. Das Ganze lässt sich zentral konfigurieren und ist damit auch für weitere Datenbanken mit ähnlichen Anforderungen geeignet.
Die Frage ist nur: " Welches Ereignis muss eintreten, damit der Agent happy getriggert wird ?"

BTW. Im Source Code sind ja schon alle Routinen enthalten, die man benötigt, um auch einen addin gesteuerten Trigger zu realisieren. ( Dafür habe ich ein stabiles C / C++ Teil bereits fertig; hier müssten lediglich die Routinen zum Starten des Agenten eingebaut werden )
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #11 am: 03.02.06 - 07:40:34 »
Der Vorteil an dem Java-Serveraddin ist eigentlich, dass ich keinen Agenten mehr benötige, weil mein Addin die Arbeit leistet.
Im Beispiel von jNotes werden zwar Agenten durch den Addin gestartet, ich würde aber die Logik vom Addin machen lassen. Hier kann man vielleicht auch die 2h durch ein paar parallele Threads verkürzen.
sagt Mark.



slowfood.de

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #12 am: 03.02.06 - 07:49:00 »
Spontan würde mir nur ein ServerAddin einfallen, welches periodisch den Agenten in der Datenbank antriggert ...
Ich hab in einem Projekt einfach den Windows scheduler benutzt und hab dann mit einer vbs-Datei  (windows scripting host) sogar über OLE (weil der Agent selbst Notes-Frontend Klassen nutzt) den Agenten gestartet.
Sofern du so wirkliche Serveragenten (d.h. ohne NotesUI-Klassen) triggerst ginge das auch über Java/Quartz-Framework oder Com (MS-Scheduling). Beides halte ich für robuster.
Wenn man ein bischen Java kann, braucht man nix von JNotes. Es ist wirklich einfach, dass mit Quartz selbst zu bauen. Quartz wird auch sehr viel eingesetzt und ist auch robust.

Meine für (auf dem Server-laufende) modifizierte OLE Lösung sieht so aus (wenn der Agent Frontend Klassen benutzt, ist OLE ein MUSS, wie ich feststellen mußte). Ein über Java getriggerter Agent kann keine Frontend Klassen nutzen, auch wenn der Agent selbst in LotusScript geschrieben ist. In Com sollte sich das ähnlich verhalten.

VBS-Script:
Code
strServer = "server"

strDatabase = "dbPfad/dbName.nsf"

Set notesSession = CreateObject("Notes.NotesSession")
set notesDB = notesSession.getdatabase(strServer, strDatabase)
'msgbox notesDB.FilePath
set notesAgent = notesDB.getAgent("agentName")
notesAgent.runOnServer 'wenn der auf dem Server laufen soll (hiess vermutlich anders als .runOnServer

notesAgent = nothing
notesDb = nothing
notesSession = nothing

Die = nothing Zeilen sind nicht zum Spaß da.
Mark hat ja ähnliche Erfahrungen gemacht.
Das ist auf jeden Fall ein wichtiges Thema. Keine Memory Leaks beim selbstgebauten Scheduling.
Moderne Profiler können einem beim Erkennen helfen, aber mit diesen Teilen bin ich immer noch nicht so firm, obwohl es wichtig ist und in den letzten Jahren immer beliebter wurde.

Der Notes-Client (ich mache Frontend-Sachen) muß immer offen sein.
« Letzte Änderung: 03.02.06 - 07:57:21 von kennwort »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Mark³

  • Senior Mitglied
  • ****
  • Beiträge: 386
  • Geschlecht: Männlich
  • Nordisch by Nature
    • Das Leben aus der Sicht eines Menschen
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #13 am: 03.02.06 - 08:10:48 »
bei jNotes gibt es nur ein laufendes Beispiel, natürlich darf man die Seite auch meiden... Das eigentliche Addin besteht nur aus folgenden Zeilen:

Code
import lotus.notes.addins.*;
import lotus.notes.*;

public class MyAddin extends JavaServerAddin {

	/** main method of JavaServerAddin */
	public void runNotes() {
		// do all without an agent	
	}
}

Das finde ich wesentlich eleganter als mit OLE oder VB auf dem Server anzufangen.
sagt Mark.



slowfood.de

Offline smoki

  • Senior Mitglied
  • ****
  • Beiträge: 325
  • Geschlecht: Männlich
    • Smoki's Lotus Notes
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #14 am: 03.02.06 - 09:10:03 »
Hallo!

Man kann auch via C++ API einen Agenten über Kommandozeile starten.

Ich habe da mal vor Jahren geschrieben.

Syntax:

startagent Datenbank.nsf AgentName

oder mit Serverangabe

startagent Servername!!Datenbank.nsf AgentName

Eigentlich sollte dir das weiterhelfen. Die noch benötigte lncpp30.dll bekommt man bei der Lotus C++ API 3.0!

Viel Erfolg!

Gruss
Chris

Glombi

  • Gast
Re: Einen periodischen Agent ohne AMgr starten?
« Antwort #15 am: 03.02.06 - 09:13:35 »
Zitat
@Glombi:

Dein Ansatz funktioniert praktisch einwandfrei.

Und trotzdem stehen mir die Haare bei dieser Sache zu Berge,
(zumindest die paar, die ich noch habe) und rollen sich mir die Fingernägel hoch.

EIN Agent soll laufen, dafür muß ich 1.000 Agenten "starten" und absichtlich in täglich 1.000 Fehlermeldungen laufen lassen. Damit ich die Fehlermeldungen nicht sehe, vergewaltige ich noch schnell das Heiligtum notes.ini , so dass mir das System keine Fehlermeldungen mehr bringt - die eigentlich von der Sache her oft sehr nützlich sind und sinnvoll, sie zu lesen.

Das ist mir irgendwie ne Nummer zu krass. Wahrscheinlich bin ich zu weich...
Wenn's doch nur nicht die einzige Lösung wäre...
Auch wenn Du eine der alternative Lösungen umsetzt, würde ich dennoch eine separate ID genieren. Denn wie sacht der Maddin immer: Sischer is Sischer

Andreas
« Letzte Änderung: 03.02.06 - 09:17:07 von Glombi »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz