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.
Abbildung 1: DeltaMaster 6 Service
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.
Abbildung 2: lusrmgr.msc
Im Bereich Benutzer legen wir nun den User an, der für den SQL Agent als Proxy dienen wird.
Abbildung 3: Anlegen eines neuen Benutzers
Nach dem Anlegen des Users fügen wir ihn noch in die lokale Administratorengruppe hinzu.
Abbildung 4: Hinzufügen in die Administratoren Gruppe
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.
Abbildung 5: Sicherheit auf dem SQL Server
Nun suchen wir den im vorherigen Schritt angelegten User heraus und fügen ihn hinzu.
Abbildung 6: Anlegen von Anmeldeinformationen
Anschließend nutzen wir die gerade angelegten Sicherheitsinformationen und erstellen den Proxy User.
Abbildung 7: Anlegen eines Proxy Users
Abbildung 8: Hinterlegen und Auswählen der Sicherheitsinformationen
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.
Abbildung 9: Fehler beim Ausführen der Batchdatei
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.
Abbildung 10: Einrichten der administrativen Rechte
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:
Abbildung 12: Anlegen des SQL Agent Jobs
Abbildung 13: SQL Agent Einrichtung
Test
Zum Abschluss testen wir noch unseren neuen Ablauf:
Abbildung 14: Test des SQL Agent Jobs
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..