Envato Elements - pobieraj co chcesz, ile chcesz

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.

(!) Zgłoś błąd na stronie
Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!
Spodobał Ci się artykuł? Zapisz się do naszego Newslettera - ZERO SPAMu, same konkrety, oraz dostęp do dodatkowych materiałów przeznaczonych dla subskrybentów!
Na podany adres e-mail otrzymasz od nas wiadomość e-mail, w której znajdziesz link do potwierdzenia subskrypcji naszego Newslettera. Dzięki temu mamy pewność, że nikt nie dodał Twojego adresu przez przypadek. Jeśli wiadomość nie przyjdzie w ciągu najbliższej godziny (zazwyczaj jest to maksymalnie kilka minut) sprawdź folder SPAM.

Patryk

CEO Webinsider.pl, a do tego CTO, CIO, CFO, CMO, CSO, COO i CRO ;-)
Pasjonat nowych technologii - od sprzętu po oprogramowanie, od serwerów po smartfony i rozwiązania IoT. Potencjalnie kiepski bloger, bo nie robi zdjęć "talerza" zanim zacznie jeść.

Dumny przyjaciel swoich psów :-)
Envato Elements - pobieraj co chcesz, ile chcesz
Napisz komentarz
wipl_napisz-komentarz_01Jeśli informacje zawarte na tej stronie okazały się pomocne, możesz nam podziękować zostawiając poniżej swój komentarz.

W tej formie możesz również zadać dodatkowe pytania dotyczące wpisu, na które – w miarę możliwości – spróbujemy Ci odpowiedzieć.
Linki partnerskie
Niektóre z linków na tej stronie to tzw. „linki partnerskie”, co oznacza, że jeśli klikniesz na link i dokonasz wymaganej akcji (np. zakup/rejestracja) możemy otrzymać za to prowizję. Pamiętaj, że polecamy tylko te produkty i usługi, z których sami korzystamy, i uważamy, że są tego na prawdę warte… :-)
Znaki towarowe i nazwy marek
W niektórych wpisach (oraz innych miejscach na stronie) mogą być przedstawione/użyte znaki towarowe i/lub nazwy marek, które stanowią własność intelektualną tych podmiotów, a zostały użyte wyłącznie w celach informacyjnych.
Envato Elements - pobieraj co chcesz, ile chcesz