# Dienst wird beendet und nicht automatisch neu gestartet



## Skulli (8. Juni 2018)

Hi zusammen,
ich habe ein etwas spezielles Problem. Ein Windows Dienst "PostSQL" hängt sich sporadisch alle paar Stunden oder Tage auf und wird dann nicht wieder automatisch gestartet. Der Postsql Dienst hat hier die Aufgabe Bilder aus einer Datenbank von einem Server zu ziehen und auf dem Rechner lokal zu speichern. Der Rechner ist ein W7 Pro Rechner von Dell.

Es gibt leider keinen einzigen Hinweis in der Ereignisanzeige wenn/wann/warum der Dienst beendet wird. Ich habe auch schon versucht mit einer Batch Datei den Dienst neu starten zu lassen wenn dieser abschmiert. Hat jemand eine Idee wo man hier noch ansetzen könnte ? Gibt es eine Software für Dienste Überwachung ?

Wie auf dem Screenshot zu sehen ist wird der Dienst als started angezeigt. Öffnet man den Dienst jedoch steht der service status auf stopped.
Was würdet ihr mir empfehlen ?




			Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.


----------



## taks (8. Juni 2018)

Vielleicht mal die neuste Version von PostgreSQL installieren?
Die letzte Stable ist ja 10.4


----------



## Skulli (8. Juni 2018)

Ist eine etwas heikle Sache. Das ist eine industrielle Anwendung. Ein Update der SQL könnte einiges lahm legen. Mir geht es erst einmal darum den Dienst zu überwachen und ggfs neu zu starten.


----------



## taks (8. Juni 2018)

Dann würde ich eine dieser zwei Optionen versuchen.
Löst zwar das Problem nicht, aber dafür das Symptom 
Dienste automatisch neu starten uber geplante Tasks – MyLittleTechBlog
Abgesturzte Dienste automatisch neu starten - MaxPro Handbuch


----------



## Skulli (8. Juni 2018)

Die beiden Lösungen habe ich schon probiert. Aktuell ist es genauso eingestellt wie im zweiten Link (also dass der Service neu starten soll, was er aber nicht tut). Habe das auch über eine Batch Datei probiert die dann ausgeführt werden soll, klappt ebenfalls nicht.
Der erste Link hilft leider nicht weiter weil der Dienst eigentlich nicht so lange gestoppt sein darf. Der Task prüft das ja maximal 1x täglich.


----------



## taks (8. Juni 2018)

Wenn mich nicht alles täuscht würde sich der Dienst so jede 30 Minuten neu starten




			Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.


----------



## fotoman (8. Juni 2018)

Skulli schrieb:


> Habe das auch über eine Batch Datei probiert die dann ausgeführt werden soll, klappt ebenfalls nicht.


Was klappt denn da exakt nicht?

Aber mal von vorne:
- die Statusanzeige im Dienstemonitor ist nicht immer aktuell, wenn man den Dienstemonnitor nicht gerade neu geöffnet hat. Erst ein F5 / Aktualisieren liefert den aktuelen Status (den, der auch in den Eigenschaften des Dienstes stehen sollte).
- was liefert ein "sc query postgresql-9.4" (oder so ähnlich). Ein Windows-Servicename mit "-" im Namen kann  wohl nur von Linux stammen, muss man vermutlich irgendwie escapen, u.U. klappt das mit Anführungszeichen um den Servicenamen
- dies sollte auch "stopped" liefert
- kannst Du den Dienst manuel im Dienstemonitor per Maus wieder starten?
- Wenn ja, was klappt dann mit dem zuvor erwähnten Batchfile nicht? Ich tippe schlicht auf  den abartiben Dienstenamen und "vergessenes" Escapen.

- wenn im Eventlog von Windows garnichts zum Beenden zu finden ist, deutet dies auf einen Speicherproblem oder ähnliche Abstürze hin. 

Da hilft nur entweder der harte Neustart alle X Minuten/Stunden/Tage oder halt der Neustart, wenn es abgestützt ist. In biden Fällen muss das natürlich die Anwendung mitmachen.

 Vorher kann man monitoren, wann/wie oft er abstürzt und wie die Speicherauslastung dabei ist. Da der Dienst wohl "oft genug" abstürtzt genügt schon ein einfaches Batchfile (mit obigen SC query ...., errorlevel und noch ein paar weitere Zeilen).


----------



## Skulli (11. Juni 2018)

- Den Dienst kann ich über die Dienstanzeige manuell neu starten, das klappt.
- Was bedeutet escapen in diesem Zusammenhang ?
- Wie genau muss so eine Batchfile denn aussehen ? Ich habe mir 


> sc query postgresql-9.4
> pause


gebaut.


----------



## fotoman (11. Juni 2018)

Der Servername muss bei "Sonderzeichen" wie Minus oder Space im Name in doppelte Anführungszeichen gesetzt werden, also

```
sc query "postgresql-9.4"
```

Gesamthaft dann frei nach windows - How to check if a service is running via batch file and start it, if it is not running? - Stack Overflow

```
@echo off
for /F "tokens=3 delims=: " %%H in ('sc query "postgresql-9.4" ^| findstr "        STATE"') do (
  if /I "%%H" NEQ "RUNNING" (
   REM Put your code you want to execute here
   echo service not running
   rem net start "postgresql-9.4"
  )
)
```
Man kann das natürlich beliebig umbauen und z.B. "FIND" und "errorlevel" nutzen, aber das Beispiel funktioniert bei mit unter Windwos Server 2008 R2 (obwohl ich es auf Anhieb nicht erklären könnte).


----------



## Skulli (14. Juni 2018)

Das werde ich testen, vielen Dank !


----------

