PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (Suche) - Script oder .bat um Windows Dienst automatisch neu zu starten bei Inaktivität



Checcker
05.05.2020, 17:00
Hi,

also hab einen Windows Dienst mit dem Namen sdnsplus. Möchte mit dem Script überprüfen lassen ob der Dienst aktiv ist, sollte das nicht der Fall sein soll dieser sofort neugestartet werden. Die Überprüfung soll in Dauerschleife stattfinden. Klar gibt es da auch die Aufgabenverwaltung oder die Funktion den Dienst automatisch neustarten zu lassen über Windows, allerdings nur nach 60 Sekunden. Daher würde hier nur ein Script oder eine .bat in Frage kommen. Gerne lasse ich dafür auch eine Kleinigkeit (BitCoins) springen.

masterholdy
05.05.2020, 17:40
https://nssm.cc/

nssm install <service_name>
nssm status <service_name>

wenn status nicht "SERVICE_RUNNING" ist
nssm restart <service_name>

wenn dir sowas reicht wäre das in paar zeilen in python bspw. geschrieben

____

nssm hat auch ein restart modus aber ka ob das schon sowas ist was du suchst

Syndalac
05.05.2020, 17:42
Sowas findet man mit eine Minute googlen.

Dienste per Batch starten/stoppen ? WB Wiki (http://wiki.winboard.org/index.php/Dienste_per_Batch_starten/stoppen)

Quelle: https://www.google.com/search?client=opera&q=batch+dienst+starten&sourceid=opera&ie=UTF-8&oe=UTF-8

Checcker
05.05.2020, 19:01
joa würde passen kann ruhig was einfaches sein Hauptsache es erfüllt seinen Zweck.

Wäre das evtl nicht etwas einfacher, das einfach über die Shell von Windows laufen zu lassen mit einer Endlosschleife ?

masterholdy
05.05.2020, 19:12
habe null plan von .bat scripting aber für das was ich getestet habe ging das folge auf jeden


@ECHO off
:loop
%*

goto loop


$ ./test.bat rclone size gdrive:/

hat gdrive:/ unendlich gelooped

kannst du ja mal testen

also in python wäre das bissl besser zu lösen mit fehler erkennung etc

edit// wenn du das programm immer gleich startest kannst du einfach %* mit deinen programm start + parameter austauschen
also in diesem fall mit den rclone size gdrive:/ sachen

zer0.de
05.05.2020, 20:13
Oder so, so lasse ich rush neustarten wenn er abschüsselt:

set ProgrammExe=ftprush.exe ->deine exe die starten soll (sollte auch mit service klappen)
set ProgrammPfad="C:\Program Files (x86)\FTPRush" (der direkte Pfad ohne Slash!)
set zeitSek=300 (wie oft soll geprüft werden? alle 300 sek = 5mins)

einmal starten das wars...

hF



@echo off
set ProgrammExe=ftprush.exe
set ProgrammPfad="C:\Program Files (x86)\FTPRush"
set zeitSek=300
cd /d "%ProgrammPfad%"
:refresh
set /a zeitMins=%zeitSek%/60
cls
tasklist|find "%ProgrammExe%">nul
if not errorlevel 1 echo Programm laeuft noch&goto :time
echo Programm wird gestartet...&start %ProgrammExe%
:time
echo Warte %zeitMins% Minuten...
ping localhost -n 60>nul
set /a zeitMins=%zeitMins%-1
if "%zeitMins%"=="0" goto :refresh
cls&goto :time

Hakkep3t3r
05.05.2020, 20:33
Vielleicht so:


@echo off & setlocal
:loop
for /f "tokens=6 delims= " %%a in ('sc getkeyname "sdnsplus"') do set dienst=%%a
echo Dienst: %dienst%
set Status=
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do if not defined Status set Status=%%b
echo Status: %Status%
if /i "%Status%" == "STOPPED" net start %dienst%
goto loop

Hab nen Teil von Google, aber funktioniert soweit. Durch den Loop kann sich der Dienst aber nicht mehr deaktivieren und es gibt ne Fehlermeldung...

Oder erstellst ein task mit trigger "Bei Protokollierung eines bestimmten Ereignisses" und nimmst den loop wieder raus. Wenn der Dienst sich dauernd deaktiviert, wird ja irgendeine Meldung ausgegeben.