Ostatnio jedna z usług „działających w tle” na moim komputerze zaczęła szwankować, prawdopodobnie ze względu na to, że najczęściej korzystam z hibernacji zamiast zamykać system (wygoda i czas), i podczas wzbudzania coś się dziej z nią niedobrego, i przestaje działać, a przyznam, że nie mam czasu ani ochoty sprawdzać, czy na pewno działa – ma działać automatycznie w tle i tyle…
Dlatego postanowiłem przygotować mały skrypt (zwykły BAT/CMD) uruchamiany „raz na jakiś czas” za pomocą systemowego harmonogramu zadań, który ma m.in. sprawdzić czy usługa działa, w i razie konieczności ją ponownie uruchomić (zrestartować).
Kontrola stanu usługi w systemie Windows
Skrypt zaczyna swoją pracę od wywołania funkcji sprawdzającej za pomocą komendy „sc” status monitorowanej usługi (RUNNING), i jeśli kod błędu będzie równy 1 (usługa prawdopodobnie nie działa), w tym momencie wywoływana jest funkcja odpowiedzialna za ponowne włączenie usługi:
:CzyUslugaOK
sc query JakasUslugaService | Find "RUNNING"
if %errorlevel% == 1 call:StartUslugi
GOTO:EOF
:StartUslugi
net stop JakasUslugaService
net start JakasUslugaService
if %errorlevel% == 2 call:StartUslugi
if %errorlevel% == 0 timeout 5
if %errorlevel% == 0 start "JakasUsluga" "C:\(...)\JakasUslugaTray.exe"
if %errorlevel% == 0 exit
GOTO:EOF
call:CzyUslugaOK
Choć powyżej to wersja przygotowana na potrzeby tego wpisu, bo u mnie działa to w połączeniu z jeszcze jedną funkcją, która sprawdza czy dostępny jest określony zasób dyskowy:
:CzyDyskOK
@IF EXIST "x:\status.txt" (
call:CzyUslugaOK
) ELSE (
timeout 60
call:CzyDyskOK
)
GOTO:EOF
CzyUslugaOK
sc query JakasUslugaService | Find "RUNNING"
if %errorlevel% == 1 call:StartUslugi
GOTO:EOF
StartUslugi
net stop JakasUslugaService
net start JakasUslugaService
if %errorlevel% == 2 call:StartUslugi
if %errorlevel% == 0 timeout 5
if %errorlevel% == 0 start "JakasUsluga" "C:\(...)\JakasUslugaTray.exe"
if %errorlevel% == 0 exit
GOTO:EOF
call:CzyDyskOK
Po prostu usługa obecnie ma wyłączony automatyczne uruchamianie wraz z systemem – i tak zawodziło, a dodatkowo pierwsze uruchomienie powinno mieć miejsce dopiero po podłączeniu i odblokowaniu dodatkowego dysku.
Dlatego najpierw skrypt sprawdza czy na określonym dysku znajduje się kontrolny plik „status.txt” – jeśli go nie ma, daje mi (kolejne) 60 sekund czasu na podłączenie, i dopiero gdy wykryje zdefiniowany plik przystępuje do uruchomiania usługi.


- Wtyczka BackWPup w wersji 5.x to doskonały przykład, jak wylać dziecko z kąpielą i z relatywnie świetnego narzędzia zrobić właściwie bezwartościowego gniota - 1970-01-01
- Testowy przelew w Bitcoinach z najniższą prowizją, czyli krótka historia o tym, jak zamroziłem BTC na (ponad) rok - 1970-01-01
- Nowy system kopii zapasowych w Home Assistant 2025.1 to zapewne krok w dobrym kierunku, ale zdecydowanie przedwczesny - 1970-01-01