Chcę napisać plik wsadowy, który wykonuje następujące operacje:
- Sprawdź, czy usługa jest uruchomiona
- Jeśli to działa, zamknij pakiet
- Jeśli nie działa, uruchom usługę
Próbki kodu, które do tej pory wygooglowałem, okazały się nie działać, więc postanowiłem ich nie publikować.
Uruchomienie usługi odbywa się poprzez:
net start "SERVICENAME"
- Jak mogę sprawdzić, czy usługa jest uruchomiona i jak złożyć instrukcję if w pliku wsadowym?
- Jestem nieco zdezorientowany. Jaki argument mam przekazać na start netto? Nazwa usługi czy jej nazwa wyświetlana?
Odpowiedzi:
Aby sprawdzić stan usługi, użyj
sc query <SERVICE_NAME>
. Jeśli blokuje się w plikach wsadowych, zapoznaj się z dokumentacją .Poniższy kod sprawdzi stan usługi
MyServiceName
i uruchomi ją, jeśli nie jest uruchomiona (blok if zostanie wykonany, jeśli usługa nie jest uruchomiona):Wyjaśnienie, co robi:
Jeśli chodzi o drugie pytanie, argumentem, do którego chcesz przekazać,
net start
jest nazwa usługi, a nie nazwa wyświetlana.źródło
sc query "SCardSvr"
z wiersza poleceń?Aby przełączyć usługę, użyj następującego;
źródło
||
rzeczywistości jestOR
operatorem, chociaż w tym przypadku jest to instrukcja funkcjonalnaELSE
. To subtelna, ale ważna różnica. Nadal mam +1 - robię to cały czas w skryptach powłoki Unix / Linux, nie wiem, dlaczego nigdy nie pomyślałem o zrobieniu tego w systemie Windows.Możesz użyć następującego polecenia, aby sprawdzić, czy usługa jest uruchomiona, czy nie:
Kiedy uruchamiam go dla mojego NOD32 Antivirus, otrzymuję:
Gdyby został zatrzymany, dostałbym:
Możesz użyć tego w zmiennej, aby następnie określić, czy używasz NET START, czy nie.
Nazwa usługi powinna być nazwą usługi, a nie nazwą wyświetlaną.
źródło
Że należy to zrobić:
źródło
Wersja niezależna od języka.
źródło
Set ServiceName=Jenkins
zSet ServiceName=%~1
i nazywają to jakwatch-service.bat "Jenkins"
Właśnie znalazłem ten wątek i chciałem dodać go do dyskusji, jeśli osoba nie chce używać pliku wsadowego do ponownego uruchamiania usług. W systemie Windows jest opcja, jeśli przejdziesz do Usługi, właściwości usługi, a następnie odzyskiwanie. Tutaj możesz ustawić parametry usługi. Chciałbym ponownie uruchomić usługę, jeśli usługa zostanie zatrzymana. Możesz także wykonać drugą nieudaną próbę zrobienia czegoś innego, jak w przypadku ponownego uruchomienia komputera.
źródło
Cuando se używaj Windows en Español, el código debe quedar asi (gdy używasz Windows w języku hiszpańskim, kod to):
Reemplazar MYSERVICE con el nombre del servicio que se desea procesar. Puedes ver el nombre del servicio viendo las propiedades del servicio. (Zastąp MYSERVICE nazwą usługi do przetworzenia. Nazwę usługi można zobaczyć we właściwościach usługi).
źródło
źródło
W przypadku Windows Server 2012 poniżej działało dla mnie. Zastąp tylko „SERVICENAME” rzeczywistą nazwą usługi:
źródło
Chciałem również, aby e-mail został wysłany, jeśli usługa została uruchomiona w ten sposób, więc dodałem trochę do kodu @Ic, po prostu pomyślałem, że opublikuję go na wypadek, gdyby to komuś pomogło. Użyłem SendMail, ale są inne opcje wiersza poleceń. Jak wysłać prostą wiadomość e-mail z pliku wsadowego systemu Windows?
źródło
Uruchamianie usługi przy użyciu skryptu Powershell. Możesz połączyć to z harmonogramem zadań i wyzwalać je w odstępach czasu lub w razie potrzeby. Utwórz to jako plik PS1, tj. Plik z rozszerzeniem PS1, a następnie pozwól, aby ten plik był uruchamiany z harmonogramu zadań.
Aby rozpocząć, zatrzymaj usługę
w harmonogramie zadań, jeśli używasz go na serwerze, użyj tego w argumentach
-noprofile -executionpolicy bypass -file "C: \ Service Restart Scripts \ StopService.PS1"
sprawdź, uruchamiając to samo na cmd, jeśli działa, powinien również działać na harmonogramie zadań
źródło
źródło
Związane z odpowiedzią @DanielSerrano, ostatnio byłem trochę od lokalizacji
sc.exe
polecenia, a mianowicie po hiszpańsku. Moją propozycją jest wskazanie linii i tokena, który zawiera numeryczny stan usługi i zinterpretowanie go, co powinno być znacznie bardziej niezawodne:Testowane z:
źródło
Może o wiele prostszy sposób? Dodam tylko do listy odpowiedzi tutaj:
źródło