Я хочу написать командный файл, который выполняет следующие операции:
- Проверьте, запущена ли служба
- Если он запущен, выйдите из партии
- Если он не запущен, запустите службу
Примеры кода, которые я искал в Google, оказались неработоспособными, поэтому я решил не публиковать их.
Запуск службы осуществляется:
net start "SERVICENAME"
- Как я могу проверить, запущена ли служба, и как сделать оператор if в пакетном файле?
- Я немного запутался. Какой аргумент я должен передать чистому старту? Название сервиса или его отображаемое имя?
Ответы:
Чтобы проверить состояние службы, используйте
sc query <SERVICE_NAME>
. Информацию о блоках if в пакетных файлах см. В документации .Следующий код проверит состояние службы
MyServiceName
и запустит ее, если она не запущена (блок if будет выполнен, если служба не запущена):Объяснение того, что он делает:
Что касается вашего второго вопроса, аргумент, который вы захотите передать,
net start
- это имя службы, а не отображаемое имя.источник
sc query "SCardSvr"
из командной строки?Для переключения службы используйте следующее:
источник
||
на самом деле являетсяOR
оператором, хотя в данном случае это функциональноELSE
заявление. Это тонкое, но важное отличие. У меня все еще есть +1 - я все время делаю это в сценариях оболочки Unix / Linux, не знаю, почему я никогда не думал делать это в пакетном режиме Windows.Вы можете использовать следующую команду, чтобы узнать, запущена служба или нет:
Когда я запускаю его для своего антивируса NOD32, я получаю:
Если бы его остановили, я бы получил:
Вы можете использовать это в переменной, чтобы затем определить, используете ли вы NET START или нет.
Имя службы должно быть именем службы, а не отображаемым именем.
источник
Это должно сработать:
источник
Независимая от языка версия.
источник
Set ServiceName=Jenkins
наSet ServiceName=%~1
и назовите это какwatch-service.bat "Jenkins"
Я только что нашел эту ветку и хотел добавить в обсуждение, если человек не хочет использовать командный файл для перезапуска служб. В Windows есть опция, если вы перейдете в Сервисы, свойства службы, затем восстановление. Здесь вы можете установить параметры услуги. Хотелось бы перезапустить службу, если служба остановится. Кроме того, у вас даже может быть вторая неудачная попытка сделать что-то другое, например, перезагрузить компьютер.
источник
Cuando se использует Windows en Español, el código debe quedar asi (при использовании Windows на испанском языке код следующий):
Reemplazar MYSERVICE с номером обслуживания, который находится в процессе обработки. Puedes ver el nombre del servicio viendo las propiedades del servicio. (Замените MYSERVICE названием службы, которая будет обрабатываться. Вы можете увидеть имя службы в ее свойствах.)
источник
источник
Для Windows Server 2012 у меня сработало то, что ниже. Замените только "SERVICENAME" фактическим названием службы:
источник
Я также хотел, чтобы электронное письмо было отправлено, если служба была запущена таким образом, поэтому добавил немного кода @Ic, просто подумал, что опубликую его, если это кому-то поможет. Я использовал SendMail, но есть и другие параметры командной строки. Как отправить простое электронное письмо из командного файла Windows?
источник
Запуск службы с использованием сценария Powershell. Вы можете связать это с планировщиком задач и запускать его через определенные промежутки времени или по мере необходимости. Создайте его как файл PS1, то есть файл с расширением PS1, а затем позвольте этому файлу запускаться из планировщика задач.
Для запуска остановки службы
в планировщике задач, если вы используете его на сервере, используйте это в аргументах
-noprofile -executionpolicy bypass -file "C: \ Service Restart Scripts \ StopService.PS1"
проверьте, запустив то же самое на cmd, если он работает, он также должен работать в планировщике задач
источник
источник
Связанный с ответом @DanielSerrano, я недавно немного занимался локализацией
sc.exe
команды, а именно на испанском языке. Мое предложение состоит в том, чтобы точно указать линию и токен, которые содержат числовое состояние службы, и интерпретировать их, что должно быть намного более надежным:Протестировано с:
источник
Может, способ намного проще? Просто добавляю сюда список ответов:
источник