In diesem Blogbeitrag soll eine Möglichkeit aufgezeigt werden, mittels des SQL Server Agents den Zustand des DeltaMaster-Service zu prüfen bzw. ihn automatisiert wieder zu starten. Hierfür werden einfache Grundfunktionalitäten von Windows eingesetzt, so dass keine zusätzlichen Programme notwendig sind.
Grundherausforderung
Herausforderung
Immer mal wieder kommt es vor, dass Windows einen Dienst im Hintergrund beendet oder stoppt. Kein Problem, wenn er dann auch automatisch wieder von Windows gestartet wird. Dies funktioniert aber leider nicht immer und gerade der DeltaMaster User merkt es dann, wenn das Repository nicht erreichbar ist oder die Berichte nicht per Email wie gewohnt angekommen sind. In diesem Blogbeitrag wird beschrieben, wie unabhängig von dem Verhalten von Windows der Status des Dienstes kontrolliert und bei Nichtgefallen angepasst werden kann.
Voraussetzung
Um die in diesem Artikel beschrieben Funktionen nutzen zu können, wird ein Dienstkonto für den SQL Agent (oder ein Proxy User) benötigt, welcher Mitglied in der lokalen Administratorengruppe ist.
Aufbau der Ausgangssituation
Auf dem Server ist DeltaMaster 6 Service installiert, welcher die Grundlage für das Repository und damit auch für die Berichtsverteilung bildet, wenn die Berichtsjobs auf das Repository verweisen.
Aufbau der Lösung
Vergleich der unterschiedlichen Lösungsansätze
Um den Zustand des Service zu prüfen, gibt es sicherlich verschiedene Ansätze wie etwa das Ausführen eines Power Shells Skriptes oder auch das Einrichten einer zusätzlichen Software. Für diesen Artikel wurde sich für eine Mischung aus SQL Server Agent und Batchdateien entschieden, da hier ein geringer Aufwand für den Administrator vorliegt und sich der Aufruf reibungslos in die Ausführungsschritte wie etwa den Berichtsversand einbauen lässt.
Vorbereitung
Anlegen eines Dienstusers
Im regulären Fall ist die klare Empfehlung einen Active Directory User zu nutzen. Sollte dies nicht möglich sein, so können wir natürlich auch auf dem lokalen Server einen User anlegen. Hierfür wird die „Lokale Benutzer und Gruppen“ – Konsole (lusrmgr.msc) genutzt.
Im Bereich Benutzer legen wir nun den User an, der für den SQL Agent als Proxy dienen wird.
Nach dem Anlegen des Users fügen wir ihn noch in die lokale Administratorengruppe hinzu.
Erstellen der Proxy-Informationen
Als erstes müssen dem SQL Server die Login-Informationen bekannt gemacht werden. Hierfür öffnen wir das SQL Server Management Studio, verbinden uns auf den Server und navigieren zu dem Punkt Sicherheit -> Anmeldeinformationen.
Nun suchen wir den im vorherigen Schritt angelegten User heraus und fügen ihn hinzu.
Anschließend nutzen wir die gerade angelegten Sicherheitsinformationen und erstellen den Proxy User.
Erstellen der Batchdateien
Für die Prüfung greifen wir auf eine Batchdatei zurück, welche in der Kommandozeile aufgerufen werden kann.
@Echo OFF Set ServiceName = "DeltaMaster 6 Service" SC queryex "DeltaMaster 6 Service" |Find "STATE"|Find /v "RUNNING">Nul&&( echo DeltaMaster 6 Service not running Net Start "DeltaMaster 6 Service" exit /b 0 )||( echo DeltaMaster 6 Service working exit /b 0 )
Dieser Quelltext kann direkt in einen Texteditor kopiert werden und als „Check DeltaMasterService.bat“ gespeichert werden.
Als Versuch führen wir die Batchdatei direkt in der Kommandozeile aus.
Wie erwartet, erhalten wir eine Fehlermeldung, dass der Zugriff beim Starten des Service verweigert wurde. Hintergrund ist, dass Administratorenrechte für das Starten des Service von Nöten sind. Da Batchdateien leider nicht wie etwa eine .exe-Datei mit administrativen Rechten gestartet werden können, müssen wir hier auf einen kleinen Trick in Windows zurückgreifen. Hierzu erstellen wir eine Verknüpfung auf die eben erstellte Batchdatei und teilen dieser mit, dass sie immer mit administrativen Rechten ausgeführt werden soll.
Ein weiterer Test über die Kommandozeile führt zu dem gewünschten Ergebnis.
Einrichten des SQL Server Jobs
Innerhalb des letzten Schrittes legen wir nun noch einen SQL Agent Job an. Hier können wir die Batchdatei entweder mit dem Aufruf des Publishers kombinieren oder die Batchdatei einzeln aufrufen, um den Betrieb des Repository sicherzustellen.
Für den aktuellen Fall wird die Kombination aus Prüfung und Batchdatei verwendet.
Da der SQL Agent keine Verknüpfungen aufrufen kann, ist noch ein letzter Schritt mit einer Batchdatei notwendig. Hierfür legen wir noch eine zweite Batchdatei an, in welcher wir die Verknüpfung ausführen.
"U:\Public\Check DeltaMaster Service State\CheckDM.lnk" exit /b 0
Nun speichern wir den Aufruf noch als „StartCheck.bat“ und legen den SQL Agent Job an:
Test
Zum Abschluss testen wir noch unseren neuen Ablauf:
Meldung
Ausgeführt als Benutzer: “BC-WGN-LAP\DMServiceCheck“.
C:\WINDOWS\system32>“C:\Temp\Check\CheckDM.lnk“
DeltaMaster 6 Service not running
DeltaMaster 6 Service wird gestartet.
DeltaMaster 6 Service wurde erfolgreich gestartet.
C:\WINDOWS\system32>exit /b 0.
Prozessexitcode 0.
Der Schritt war erfolgreich.
Kommentare
Sie müssten eingeloggt sein um Kommentare zu posten..