Как я могу запустить bat или cmd для остановки и надежного запуска службы с проверкой ошибок (или сообщить мне, что она по какой-то причине не была успешной)?Остановить и запустить службу через пакетный или cmd-файл?
ответ
Используйте команду SC
(служба контроля), это дает вам гораздо больше возможностей, чем просто start
& stop
.
DESCRIPTION: SC is a command line program used for communicating with the NT Service Controller and services. USAGE: sc <server> [command] [service name] ... The option <server> has the form "\\ServerName" Further help on commands can be obtained by typing: "sc [command]" Commands: query-----------Queries the status for a service, or enumerates the status for types of services. queryex---------Queries the extended status for a service, or enumerates the status for types of services. start-----------Starts a service. pause-----------Sends a PAUSE control request to a service. interrogate-----Sends an INTERROGATE control request to a service. continue--------Sends a CONTINUE control request to a service. stop------------Sends a STOP request to a service. config----------Changes the configuration of a service (persistant). description-----Changes the description of a service. failure---------Changes the actions taken by a service upon failure. qc--------------Queries the configuration information for a service. qdescription----Queries the description for a service. qfailure--------Queries the actions taken by a service upon failure. delete----------Deletes a service (from the registry). create----------Creates a service. (adds it to the registry). control---------Sends a control to a service. sdshow----------Displays a service's security descriptor. sdset-----------Sets a service's security descriptor. GetDisplayName--Gets the DisplayName for a service. GetKeyName------Gets the ServiceKeyName for a service. EnumDepend------Enumerates Service Dependencies. The following commands don't require a service name: sc <server> <command> <option> boot------------(ok | bad) Indicates whether the last boot should be saved as the last-known-good boot configuration Lock------------Locks the Service Database QueryLock-------Queries the LockStatus for the SCManager Database EXAMPLE: sc start MyService
Использование кодов возврата от net start
и net stop
кажется лучшим методом для меня. Посмотрите на это: Net Start return codes.
Связанная страница больше не существует. Таким образом, это скорее комментарий. – Neolisk 2016-11-08 20:41:22
net start [serviceName]
и
net stop [serviceName]
вам сказать, были ли они успешно или не очень четко. Например
U:\>net stop alerter
The Alerter service is not started.
More help is available by typing NET HELPMSG 3521.
Если запущен из пакетного файла, у вас есть доступ к ERRORLEVEL обратного кода. 0 указывает на успех. Все выше указывает на отказ.
В файле летучей мыши, error.bat
:
@echo off
net stop alerter
if ERRORLEVEL 1 goto error
exit
:error
echo There was a problem
pause
Результат выглядит следующим образом:
U:\>error.bat
The Alerter service is not started.
More help is available by typing NET HELPMSG 3521.
There was a problem
Press any key to continue . . .
Коды возврата
- 0 = Success
- 1 = Not Supported
- 2 = Access Denied
- 3 = Dependent Services Running
- 4 = Invalid Service Control
- 5 = Service Cannot Accept Control
- 6 = Service Not Active
- 7 = Service Request Timeout
- 8 = Unknown Failure
- 9 = Path Not Found
- 10 = Service Already Running
- 11 = Service Database Locked
- 12 = Service Dependency Deleted
- 13 = Service Dependency Failure
- 14 = Service Disabled
- 15 = Service Logon Failure
- 16 = Service Marked For Deletion
- 17 = Service No Thread
- 18 = Status Circular Dependency
- 19 = Status Duplicate Name
- 20 = Status Invalid Name
- 21 = Status Invalid Parameter
- 22 = Status Invalid Service Account
- 23 = Status Service Exists
- 24 = Service Already Paused
Редактировать 20.04.2015
Коды возврата:
The NET command does not return the documented Win32_Service class return codes (Service Not Active,Service Request Timeout, etc) and for many errors will simply return Errorlevel 2.
Посмотрите здесь: http://ss64.com/nt/net_service.html
Этот ответ - это то, что мы должны увидеть больше! Хорошая работа. – Pokus 2008-09-25 15:22:56
Не все мои - коды возврата пришли из сообщества. Редактировать ... – 2008-09-25 18:49:51
Ну, это хороший ответ все тот же. Огромное спасибо. – 2009-02-19 20:35:51
Вы можете использовать команду NET START, а затем проверить переменную ERRORLEVEL окружения, например,
net start [your service]
if %errorlevel% == 2 echo Could not start service.
if %errorlevel% == 0 echo Service started successfully.
echo Errorlevel: %errorlevel%
Отказ от ответственности: Я написал это с верхней части головы, но я думаю, что это сработает.
SC
может сделать все, что с услугами ... запуск, остановка, проверка, настройка и многое другое ...
или вы можете запустить службу удаленного с этим ЦМД: sc \\<computer> start <service>
Вместо проверка кодов, это тоже работает
net start "Apache tomcat" || goto ExitError
:End
exit 0
:ExitError
echo An error has occurred while starting the tomcat services
exit 1
Синтаксис всегда получает меня .... так ...
Здесь явно указано, как добавить строку в пакетный файл, который приведет к удалению удаленного сервиса (на другом компьютере), если вы являетесь администратором на обеих машинах, запустите .bat как администратор, а машины находятся в том же домене ,Имя компьютера следует UNC-формате \ MYSERVER
sc \\ip.ip.ip.ip stop p4_1
В этом случае ... p4_1 был как имя службы и отображаемое имя, при просмотре свойств для службы в Service Manager. Вы должны использовать имя службы.
Для вашей службы Умные наркотики ... обязательно добавьте свой код причины и комментарий! то есть «4», которая равна «Запланированные» и комментарий «Остановка сервера для обслуживания»
sc \\ip.ip.ip.ip stop p4_1 4 Stopping server for maintenance
Мы хотели бы думать, что «чистая остановка» будет остановить службу. К сожалению, реальность не такая черно-белая. Если службе требуется много времени для остановки, команда вернется до остановки службы. Однако вы не будете знать, если не будете проверять уровень ошибок.
Решение, похоже, должно циклически искать состояние обслуживания до тех пор, пока оно не будет остановлено, с паузой каждый раз вокруг цикла.
Но затем снова ...
Я вижу первую службу занять много времени, чтобы остановить, то «чистая остановка» для последующего обслуживания только, кажется, не делать ничего. Посмотрите на сервис в диспетчере служб, и его состояние все еще «запущено» - никаких изменений в «Остановка». Тем не менее я могу остановить эту вторую услугу вручную, используя SCM, и она останавливается через 3 или 4 секунды.
Я создал свой личный пакетный файл для этого, мой немного отличается, но не стесняйтесь изменять, как вы сочтете нужным. Я создал это немного назад, потому что мне было скучно и хотелось сделать простой способ для людей, чтобы они могли вводить окончание, запуск, остановку или настройку на авто. Этот BAT-файл просто запрашивает, что вы вводите имя службы, и он сделает все остальное за вас. Я не понимал, что он искал что-то, что заявляло какую-либо ошибку, я, должно быть, неправильно понял эту часть. Хотя обычно это можно сделать, введя >> output.txt в конец строки.
% var% - это просто способ для пользователя вносить свой собственный сервис в это, вместо того, чтобы менять файл bat каждый раз, когда вы хотите запустить/остановить другую службу.
Если я ошибаюсь, любой может поправить меня по этому поводу.
@echo off
set /p c= Would you like to start a service [Y/N]?
if /I "%c%" EQU "Y" goto :1
if /I "%c%" EQU "N" goto :2
:1
set /p var= Service name:
:2
set /p c= Would you like to stop a service [Y/N]?
if /I "%c%" EQU "Y" goto :3
if /I "%c%" EQU "N" goto :4
:3
set /p var1= Service name:
:4
set /p c= Would you like to disable a service [Y/N]?
if /I "%c%" EQU "Y" goto :5
if /I "%c%" EQU "N" goto :6
:5
set /p var2= Service name:
:6
set /p c= Would you like to set a service to auto [Y/N]?
if /I "%c%" EQU "Y" goto :7
if /I "%c%" EQU "N" goto :10
:7
set /p var3= Service name:
:10
sc start %var%
sc stop %var1%
sc config %var2% start=disabled
sc config %var3% start=auto
Я просто использовал пример Йонаса выше и создал полный список из 0 до 24 уровней ошибок. Другое сообщение верно, что net start
и net stop
используют только errorlevel
0 для успеха и 2 для отказа.
Но это то, что работает для меня:
net stop postgresql-9.1
if %errorlevel% == 2 echo Access Denied - Could not stop service
if %errorlevel% == 0 echo Service stopped successfully
echo Errorlevel: %errorlevel%
stop
Изменение в start
и работает в обратном направлении.
Ручной перезапуск службы в порядке - service.msc имеет кнопку «Перезапустить», но в командной строке обе команды sc и net не имеют переключателя «перезагрузки», и если перезагрузка запланирована в файле cmd/bat, служба остановлена и запущена сразу, иногда он получает сообщение об ошибке, потому что обслуживание еще не остановлено, ему нужно некоторое время, чтобы закрыть все.
Это может генерировать ошибку: подкожно остановить подкожно начать
Это хорошая идея, чтобы вставить тайм-аут, я использую пинг (это пингует каждую 1 секунду): подкожно остановки пинг локальный -n 60 sc start
- 1. Остановить или убить службу
- 2. Как запустить и остановить службу Windows по расписанию?
- 3. Не удается выполнить запрос, запустить или остановить службу Windows
- 4. хотите запустить и остановить службу с помощью активности android
- 5. Как запустить и остановить службу redis с помощью аутентификации?
- 6. Остановить службу Android через некоторое время?
- 7. Не удалось запустить и остановить службу с помощью ServiceController
- 8. Как запустить/остановить службу Windows с удаленной машины через службу WCF?
- 9. Остановить службу Windows Wildfly
- 10. Как остановить обновление пользовательского интерфейса (через службу)?
- 11. Невозможно остановить службу LocationListener
- 12. Остановить службу и таймер через определенный промежуток времени, андроид?
- 13. Остановить музыку и службу тоже
- 14. Остановить службу после времени
- 15. Как запустить пакетный скрипт через javascript?
- 16. Как запустить пакетный файл через JavaScript
- 17. Остановить/запустить Windows-сервис и построить решение
- 18. Как запустить службу Windows через VB Script?
- 19. Как остановить/запустить службу, содержащую бесконечный цикл при создании
- 20. Не удается остановить службу
- 21. Как остановить/запустить приложение IIS 7 через командную строку?
- 22. Можно ли запустить/остановить службу apache с PHP?
- 23. Остановить/запустить службу Uniface на сервере Win 2008
- 24. Невозможно остановить службу UwAmp MySQL
- 25. Остановить и запустить jQuery SlideShow
- 26. Остановить службу из-за активности
- 27. Как остановить/запустить службу logstash, запущенную в докере
- 28. MySql Notifier не удалось запустить/остановить/перезапустить службу MySql
- 29. Остановить службу Android
- 30. Остановить службу android
Возможно, несколько оффтопный (поскольку вы запрашиваете инструкцию bat & cmd), но: ** PowerShell ** дает вам много контроля и обратной связи для выполнения таких действий. – GvS 2008-09-25 15:19:55