Einen Cron Manager unter Windows?

Heute war ich auf der Suche nach eine Lösung für einen Cron Manager unter Windows. Der ein oder andere kann jetzt mit dem Argument kommen, dass man ja mit den „geplanten Tasks“, „Aufgabenplanung“, „Task Scheduler“ oder „Scheduled Tasks“ (je nach Windows Version) gemacht werden kann – das ist natürlich richtig. Aber wie siehts mit einer Ausführungshistorie aus? – Ja, auch möglich, wenn man das aktiviert. Geht auch eine Email, falls der Job fehlschlägt? – Ja, auch das ist möglich, sofern der SMTP-Server korrekt konfiguriert ist. Jetzt die Preisfrage: Können auch andere Nutzer (Nicht-Administratoren) Jobs/Crons anlegen? …mhh… schwer? Oder wie wäre es mit einer Statusanzeige fürs Intranet? Ganz nützlich wäre auch das Ausführen von Cronjobs auf verschiedenen Servern, jedoch mit zentraler Administration. Wir sehen, an diesem Punkt stoßen wir mit den Windows Bordmitteln an Grenzen.

Zuerst dachte ich an eine Java Anwendung (plattformunabhängig) und fand auch einige wie z. B. Quarz einen Job Scheduler, den ich in einer eigenen Anwendung verwenden könnte. Ich benötigte jedoch eine Lösung, die schnell einsatzfähig ist und wollte auch keine Anwendung entwickeln. Da kam mir der Einfall, dass ich auch Hudson als System verwenden könnte. Hudson ist an sich ein System zur kontinuierlichen Integration. Da ich dieses System sowieso einsetzen wollte, prüfte ich nun die Möglichkeit zwei Fliegen mit einer Klappe zu schlagen. Tatsächlich kann Hudson dafür auch eingesetzt werden (und ich bin auch nicht der erste der diese Idee hatte).

Was braucht man nun dazu? Das Basissystem besteht aus einer Hudson Installation. Diese ist unter Windows schnell erledigt:

  • Aktuelle Hudson Software herunterladen: Eine war-Datei z. Zt. in Version 2.2.0
  • Auf dem Zielsystem muß eine aktuelle Java Runtime Environment installiert sein. Am besten setzt man den Pfad zum \jre6\bin-Verzeichnis in den Windows Path, damit man in der Konsole nicht den kompletten Pfad zur Java-Installation angeben muß.
  • In der Konsole die heruntergeladene war-Datei ausführen z. B.:
    <tt>java -jar hudson.war</tt>
  • Nun startet Hudson. Das sah bei mir so aus:

    Hudson startet in der Windows Konsole

  • Wir können im Browser die Weboberfläche von Hudson öffnen über http://localhost:8080. Das sieht ungefähr so aus:

    Die Hudson Weboberfläche

  • Unter dem Menüpunkt „Hudson verwalten“ können wir diesen als Windows-Service installieren. Damit steht Hudson auch nach einem (Server-) Neustart zur Verfügung.

Konfiguration

Die Hudson Verwaltungsoberfläche

Die Hudson Verwaltungsoberfläche

Wir klicken auf „System konfigurieren“ und setzen unter dem Abschnitt „E-Mail Benachrichtigung“ die Hudson URL. Wenn wir eine Hudson Master/Slave Installation wollen, muß dort eine vom Slave aus erreichbare URL oder IP stehen.

Alle anderen Konfigurationsparamter sind so gut beschrieben, dass ich sie hier nicht erklären muß. Somit können wir gleich zur ersten Slave Installation kommen.

Die folgenden Aktionen machen wir auf dem Slave-Rechner! Wir loggen uns also per Remote-Konsole auf einem anderen Server ein und rufen dort im Browser die URL der Hudson-Master-Installation auf. In der Konfiguration klicken wir auf „Knoten verwalten“ und klicken auf „Neuer Knoten“. Wir erhalten folgenden Dialog:

Knoten in Hudson hinzufügen

Einen Slave-Knoten in Hudson hinzufügen

Wir vergeben einen Namen für den Knoten und klicken die Option „Dumb slave“ an. Sobald wir mit OK bestätigen, gelangen wir zum nächsten Dialog:

Hudson Slave Konfiguration

Hudson Slave Konfiguration

Wir benennen ein Stammverzeichnis auf dem Slave, das natürlich existiert und definieren unter „Auslastung“, dass der Rechner exklusiv verwendet werden soll. Als Startmethode wählen wir „Starte Slave-Agenten über JNLP“ aus. Wir gelangen nach der Bestätigung wieder auf die Übersichtsseite der Knoten. Erneut klicken wir auf den neu angelegten Knoten und erhalten nun Anweisungen, wie wir den Slave starten können:

Hudson Slave starten

Wir klicken also auf „Launch“. Es startet eine kleine Java-Anwendung, über die wir den Hudson-Slave auch als Windows-Dienst installieren können. In der Übersicht der Knoten erscheint der Slave nun als aktiver Knoten.

Das ist nun die Basis. Über das Anlegen von Jobs kann auch eine zeitgesteuerte Ausführung geplant werden. Es kann z. B. eine Batch-Datei ausgeführt werden oder eine Domain aufgerufen werden. Die Ausgaben können geparst und in der Auswertung berücksichtigt werden. Außerdem kann das System über Plugins erweitert werden. Wir haben also eine Menge Möglichkeiten.

Update: Slave nach Neustart starten

Die Methode über den Windows-Dienst führte nach Neustart des Slave-Servers zu der Fehlermeldung „403 Forbidden“. Die einzige Möglichkeit, die ich gefunden habe, um den Slave nach dem Neustart wieder korrekt zu starten, ist den Start-Aufruf in eine Batch-Datei auszulagen:

javaws http://[SERVER]/computer/[SLAVE-NAME]/slave-agent.jnlp

Diese Batch-Datei wird in der Registry eingetragen:

Schlüssel:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Hudson
Wert:
C:\hudson\start.bat

Über die Aufgabenplanung hat diese Methode leider nicht funktioniert (Ich habe „bei Systemstart“ und „bei Anmeldung“ probiert, mit und ohne Verzögerung).

2 Gedanken zu “Einen Cron Manager unter Windows?

  1. Krass habe schon lang keinen Artikel zu Hudson gelesen. Dachte ja eigentlich dass Hudson durch Jenkins ersetzt wurde.

    ( Btw. früher hat man eine .NET Umgebung zum Installieren des Windows Slaves gebraucht. )

Kommentar verfassen