Скрипт для перезапуска службы Windows
Обновлено: 21.11.2024
Если вы управляете службами Windows и вам удобно работать из командной строки, то команда Windows NET.EXE должна быть в вашем наборе инструментов. Используйте его, чтобы легко запускать, останавливать, приостанавливать или перезапускать любую службу из командной строки с повышенными привилегиями или в удобном сценарии или пакетном файле.
Использование NET для остановки службы Windows
Чтобы остановить службу, запустите:
где имя службы. Обязательно заключите его в кавычки, если он содержит пробел!
Например, чтобы остановить службу диспетчера очереди печати (с именем «Диспетчер очереди»), выполните:
Вот как это выглядит на нашем компьютере с Windows Server 2016:
Обратите внимание, что команда NET будет ждать остановки службы, прежде чем продолжить. Единственным исключением является случай, когда служба не отвечает или требуется более 30 секунд для выполнения требований.
Запуск службы Windows с помощью NET
Чтобы запустить бездействующую службу Windows, выполните:
Если все пойдет хорошо, ваша служба (и любая другая служба, от которой зависит ее работа) будет запущена через несколько секунд:
Как перезапустить службу Windows с помощью NET.EXE
Чтобы перезапустить службу, скажем, из пакетного файла, объедините команды "net stop" и "net start" следующим образом:
NET также будет приостанавливать и возобновлять службы Windows
Не все службы поддерживают паузу и возобновление работы, но если у вас есть служба, которая поддерживает NET, она тоже может пригодиться.
Чтобы приостановить службу, введите:
Чтобы возобновить приостановленную службу, выполните:
Вам также может понравиться.
28 ответов на вопрос Основные инструменты для служб Windows: команда NET
При использовании команды NET в пакетном режиме для перезапуска я рекомендую добавить время для реакции служб. Я сделал это для одного из моих сервисов, который имеет тенденцию зависать. См. ниже;
@ЭХО.
@ECHO Остановка служб, подождите 10 секунд…
@ECHO OFF
Служба остановки REM
NET STOP ServiceNameHere
REM Ниже приведен таймер, позволяющий очистить оперативную память сервера после остановки службы.
REM Используйте числовое значение в командной строке 'timeout', чтобы контролировать, сколько секунд будет длиться пауза.
TIMEOUT /t 10 /NOBREAK
ЭХО.
NET START ServiceNameЗдесь
У меня есть вопрос, если мне нужно запустить несколько служб, а для запуска этих служб требуется более 30 секунд, то как я могу добиться этого, поскольку в настоящее время происходит сбой с ошибкой "время ожидания 'net' истекло через 30 секунд".
Благодарим за ранний ответ. спасибо
Привет. Мы рекомендуем создать пакетный файл, который использует команду SC, чтобы остановить службу и проверить ее позже.
Чтобы остановить службу с помощью SC, используйте:
имя службы SC STOP
Чтобы проверить, была ли служба успешно остановлена (после ожидания более 30 секунд), используйте следующую команду:
SC QUERY servicename | НАЙТИ «СОСТОЯНИЕ» | НАЙТИ «ОСТАНОВЛЕНО»
Переменной %ERRORLEVEL% будет присвоено значение 1, если служба не находится в состоянии "Остановлена".
Эта статья может содержать дополнительные рекомендации.
Мне нужен сценарий для проверки способности пользователей запускать службу. Несколько пользователей на нескольких серверах. Могу ли я сделать это с помощью команд SC или NET?
Если вы не против попробовать запустить службу, вы также можете использовать NET START и искать ошибки, как показано в примере на этой странице.
сэр нет, остановите telnet, как использовать эту команду
Обратите внимание, что если имя службы состоит из двух или более слов, его необходимо заключить в кавычки. Мне потребовалось время, чтобы найти это!
Я хочу перезапустить службы на нескольких серверах Windows, и это займет около 1 минуты. Я пытался использовать NET STOP, но он не ждал и просто выполнил следующую команду для запуска. Может кто-нибудь помочь мне с точным сценарием, который я могу использовать для перезапуска служб на нескольких серверах.
NET STOP будет ждать остановки службы только около 30 секунд. Если служба занимает больше нескольких секунд, NET выдаст сообщение «Невозможно дождаться».
К сожалению, нет способа заставить NET STOP «подождать дольше». И утилита SC ничем не поможет, она даже не пытается ждать.
Мы рекомендуем использовать пакетный файл «safeServiceStop.bat» (или «safeServiceRestart.bat»), описанный в этой статье.
Сохраните пакетный файл в своей файловой системе и вызовите его из существующего пакетного файла. Обратите внимание, что вы должны добавить «localhost» при вызове нового пакетного файла. Например, чтобы остановить службу под названием «Диспетчер очереди», используйте
safeServiceStop localhost Spooler
Обратите внимание, что рекомендуемое решение будет ожидать остановки службы неопределенное время. Если служба никогда не останавливается, ваш скрипт зависнет.
ОБНОВЛЕНИЕ 27.08.2018. Мы создали бесплатную утилиту командной строки (называемую ServicePilot), которая будет ждать столько, сколько вам нужно, при остановке службы. Вы можете использовать его вместо рекомендованного выше пакетного файла — это гораздо более простая альтернатива.
При использовании ServicePilot обязательно укажите соответствующее значение для флага "-wait". Например, чтобы остановить службу диспетчера очереди печати, если для ее выполнения может потребоваться 5 минут (300 секунд), используйте:
Обратите внимание, что служба будет принудительно остановлена, если она не остановится корректно в течение заданного периода времени.
Остановить службу Тобии. Не принимает команду Net Start, а Sc start, говорит что команда неверная, имя службы (Tobii Service)
Какую команду вы используете, чтобы остановить Тобии?
Убедитесь, что вы указываете имя службы. И заключите имя в кавычки, если оно содержит пробел!
Это было правильно, я поставил имя без ("), поэтому это было неправильно, теперь это сработало. Чистый старт «Тобии Сервис»
Если я использую net stop и net start на специальной службе, которая перестала работать правильно, это не помогает, она все еще работает неправильно.
Но при перезапуске той же службы из services.msc служба сбрасывается правильно. В чем разница?
(название сервиса состоит из одного слова, так что проблема не в кавычках..)
Выводит ли NET STOP/START какие-либо сообщения об ошибках на консоль? Возможно, он дает сбой и фактически не останавливает/запускает службу.
Распространенная проблема: NET STOP/START завершится ошибкой, если у вас недостаточно прав. Убедитесь, что вы работаете в командной строке с повышенными правами (начиная с «Запуск от имени администратора»).
Спасибо. Сообщений об ошибках нет, просто пишет, что служба остановлена. И да, я запускаю его на повышенных настройках.
Я попробую тайм-аут с первого комментария в следующий раз, когда буду за компьютером.
Очень распространенная проблема при работе с командами net или SC и некоторыми пользовательскими службами заключается в том, что вам нужно указать «Имя службы», а не «Отображаемое имя». Часто они совпадают, но не всегда. Щелкните правой кнопкой мыши службу в services.msc, чтобы увидеть две на вкладке «Общие», и убедитесь, что вы делаете «Net Start servicename» — и, как сказано выше, вам все равно придется заключать ее в кавычки, если в ней есть пробелы.
Вы можете изменить имя с помощью sc, чтобы сделать его проще, если хотите, но очевидно, что это может быть плохой идеей с системными/Windows-сервисами.
Кстати, я знаю, что в статье действительно говорится об этом, но ссылка на «название службы», которая объясняет это, довольно тонкая, и я думаю, что люди могут этого не заметить.
Спасибо, что указали на важную разницу между «Именем службы» и «Отображаемым именем».
Да, мы упомянули в статье о необходимости использовать «Имя службы», но, возможно, есть способ сделать его более заметным. Мы подумаем над этим — дайте нам знать, если у вас есть идеи, которые не отвлекают от основной темы статьи (использование NET).
Обратите внимание, что наша бесплатная утилита ServicePilot (более полнофункциональная альтернатива NET.EXE) устраняет путаницу в именах, принимая как «Имя службы», так и «Отображаемое имя». Вы можете использовать любой из них!
В центре внимания искусство. Удивительно из-за. Это дало мне, возможно, лучшую задачу. ровно через 30 секунд после входа в систему, одновременно с разрешением рабочего стола в моей системе запуска SSD, я наблюдаю, как слегка модифицированная версия вашего скрипта отключает службу Synergy, а затем включает ее примерно через 20 секунд. До сих пор при каждом входе в систему в течение ~ 6 месяцев с момента получения Synergy приходилось щелкать значок на панели задач для Synergy, а затем останавливать и запускать программу, потому что она не запускает клики клиента, пока служба не перезапустится. Просто лучший. Вот мой модифицированный скрипт:
@ECHO.
@ECHO Остановка служб, подождите 10 секунд…
@ECHO OFF
Служба остановки REM
Синергия NET STOP
TIMEOUT /t 10 /NOBREAK
ЭХО.
Синергия NET START
забыл поблагодарить ВАС, основные технологии, за недавнюю помощь в запуске моего ПЛАНИРОВЩИКА ЗАДАНИЙ... хотя и на совершенно другом компьютере, чем тот, который упоминался выше.
Если служба не запущена, START не произойдет, если вы не отформатируете его следующим образом:
чистая остановка
чистая начальная
Если служба не запущена, первая строка выдаст ошибку и выдаст ошибку, а вторая подхватит и запустит службу.
Я хочу перезапускать определенную службу в определенное время каждую неделю.
если я воспользуюсь указанными выше командами, будет ли это работать?
и если не удастся остановить службу, получу ли я какое-либо уведомление по электронной почте или есть ли способ получить уведомление по электронной почте мне, если что-то пойдет не так?
также, если перезагрузка с пакетным файлом будет выполнена успешно, я все равно получу уведомление вместо входа в систему и проверки журналов Windows
Да — вы можете использовать приведенные выше команды NET в сочетании с планировщиком заданий Windows для перезапуска определенной службы в определенное время. Мы добавим в блог статью с подробностями и сообщим вам, когда она будет готова.
К сожалению, в Windows нет простого встроенного способа уведомить вас об успешном или неудачном выполнении операции службы.Некоторые администраторы крупных сайтов настроили инструменты, которые отслеживают важные события в журнале событий и доставляют оповещения, но это может быть излишним, если вы не работаете в корпоративной среде.
Сообщите нам, если это решение вам не подходит.
У меня есть два пакетных файла, написанных в моем приложении для остановки и запуска службы Windows.
Есть ли способ проверить состояние указанной службы (независимо от того, остановлена она или нет) и перезапустить ее в определенное время в течение дня?
Для большей ясности:
Служба приложений останавливается, скажем, в 23:00 и снова запускается в 23:15.
Есть ли способ написать временные условия для перезапуска скрипта, исключая продолжительность 23:00-23:15?
Извините, если это не имеет особого смысла.
Привет. Вы можете использовать этот простой пакетный файл, чтобы проверить, запущена служба или нет:
Сохраните эти строки в новом файле .BAT и передайте имя службы (не отображаемое имя) в качестве первого параметра.
Что касается остановки в определенное время и перезапуска в другое время, мы рекомендуем использовать планировщик заданий Windows.
Создайте базовую задачу, которая останавливает службу в 23:00 (командный файл с запуском NET STOP), а другую — запуск службы в 23:15 (с NET START).
Этот процесс описан в разделе "Перезагрузка несколько раз в день (с помощью планировщика заданий Windows)" этой статьи по теме.
Командлет Restart-Service отправляет стоп-сообщение, а затем стартовое сообщение контроллеру служб Windows для указанной службы. Если служба уже была остановлена, она запускается без уведомления об ошибке. Вы можете указать службы по их именам служб или отображаемым именам или использовать параметр InputObject для передачи объекта, представляющего каждую службу, которую вы хотите перезапустить.
Примеры
Пример 1. Перезапустите службу на локальном компьютере
Эта команда перезапускает службу инструментария управления Windows (WinMgmt) на локальном компьютере.
Пример 2. Исключение службы
Эта команда перезапускает службы, отображаемое имя которых начинается с Net, за исключением службы Net Logon.
Пример 3. Запуск всех остановленных сетевых служб
Эта команда запускает все остановленные сетевые службы на компьютере.
Эта команда использует командлет Get-Service для получения объектов, представляющих службы, имя которых начинается с net. Оператор конвейера ( | ) отправляет объект службы командлету Where-Object, который выбирает только те службы, которые находятся в состоянии остановки. Другой оператор конвейера отправляет выбранные службы в Restart-Service .
На практике вы должны использовать параметр WhatIf, чтобы определить действие команды перед ее запуском.
Параметры
Запрашивает подтверждение перед запуском командлета.
Тип: | SwitchParameter |
Псевдонимы: | cf |
Позиция: | Имя |
Значение по умолчанию: | False | < /tr>
Принимать ввод конвейера: | False |
Допускать подстановочные знаки: | False |
Тип: | Строка [ ] |
Позиция: | Название td> |
Значение по умолчанию: | Нет |
Принять ввод конвейера: | False< /td> |
Допускать подстановочные знаки: | True |
Указывает службы, которые этот командлет пропускает. Значение этого параметра определяет параметр Name. Введите элемент имени или шаблон, например s*. Подстановочные знаки разрешены.
Тип: | Строка [ ] |
Позиция: | Название td> |
Значение по умолчанию: | Нет |
Принять ввод конвейера: | False< /td> |
Допускать подстановочные знаки: | True |
Принудительно запускает команду без запроса подтверждения пользователя.
Тип: | SwitchParameter |
Позиция: | Именованный |
Значение по умолчанию: | Нет |
Принять ввод конвейера: | False |
Допускать подстановочные знаки: | False |
Указывает службы, которые перезапускает этот командлет. Значение этого параметра определяет параметр Name. Введите элемент имени или шаблон, например s*. Подстановочные знаки разрешены.
Тип: | Строка [ ] |
Позиция: | Название td> |
Значение по умолчанию: | Нет |
Принять ввод конвейера: | False< /td> |
Допускать подстановочные знаки: | True |
Указывает объекты ServiceController, представляющие перезапускаемые службы.Введите переменную, содержащую объекты, или введите команду или выражение для получения объектов.
Тип: | ServiceController [ ] |
Позиция: | 0 td> |
Значение по умолчанию: | Нет |
Принять ввод конвейера: | True< /td> |
Допускать подстановочные знаки: | False |
Указывает имена служб для перезапуска.
Тип: | String [ ] |
Псевдонимы: | ServiceName td> |
Позиция: | 0 |
Значение по умолчанию: | Нет |
Принимать ввод конвейера: | True |
Допускать подстановочные знаки: | True< /td> |
Возвращает объект, представляющий службу. По умолчанию этот командлет не создает никаких выходных данных.
Тип: | SwitchParameter |
Позиция: | Именованный |
Значение по умолчанию: | Нет |
Принять ввод конвейера: | False |
Допускать подстановочные знаки: | False |
Показывает, что произойдет, если командлет запустится. Командлет не запущен.
Тип: | SwitchParameter |
Псевдонимы: | wi |
Позиция: | Имя |
Значение по умолчанию: | False | < /tr>
Принимать ввод конвейера: | False |
Допускать подстановочные знаки: | False |