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.


- Notepad++ i wtyczka Linefilter3, czyli prosty sposób na filtrowanie treści, np. logów serwera, nie tylko na prośbę prokuratury ;-) - 1970-01-01
- Poważny danych wyciek z ALAB Laboratoria – do internetu trafiły nie tylko dane osobowe, ale też i dane medyczne, i choć już jest grubo, to ponoć tylko zapowiedź prawdziwego armagedonu - 1970-01-01
- Prosty sposób na bezpłatny dostęp do płatnych ikon Font Awesome, czyli krótkie testy przed ewentualnym zakupem - 1970-01-01