박쥐 또는 cmd를 스크립팅하여 오류 검사를 통해 안정적으로 서비스를 중지하고 시작하려면 어떻게해야합니까 (또는 어떤 이유로 든 성공하지 못했음을 알려주세요)?
답변
사용 SC
(서비스 제어) 명령을, 그것은 당신에게 단지보다 훨씬 더 많은 옵션을 제공 start
&를 stop
.
기술: SC는 다음과 통신하는 데 사용되는 명령 줄 프로그램입니다. NT 서비스 컨트롤러 및 서비스. 용법: sc <서버> [명령] [서비스 이름] ... <서버> 옵션의 형식은 "\\ ServerName"입니다. "sc [command]"를 입력하면 명령에 대한 추가 도움말을 얻을 수 있습니다. 명령 : query ----------- 서비스 상태를 쿼리하거나 서비스 유형의 상태를 열거합니다. queryex --------- 서비스의 확장 상태를 쿼리하거나 서비스 유형의 상태를 열거합니다. start ----------- 서비스를 시작합니다. pause ----------- 서비스에 PAUSE 제어 요청을 보냅니다. interrogate ----- INTERROGATE 제어 요청을 서비스에 보냅니다. continue -------- CONTINUE 제어 요청을 서비스에 보냅니다. stop ------------ 서비스에 STOP 요청을 보냅니다. config ---------- 서비스의 구성을 변경합니다 (지속적). description ----- 서비스 설명을 변경합니다. failure --------- 서비스가 실패했을 때 취한 조치를 변경합니다. qc -------------- 서비스의 구성 정보를 쿼리합니다. qdescription ---- 서비스에 대한 설명을 쿼리합니다. qfailure -------- 서비스가 실패했을 때 취한 조치를 쿼리합니다. delete ---------- 레지스트리에서 서비스를 삭제합니다. create ---------- 서비스를 만듭니다. (레지스트리에 추가) control --------- 서비스에 제어를 보냅니다. sdshow ---------- 서비스의 보안 설명자를 표시합니다. sdset ----------- 서비스의 보안 설명자를 설정합니다. GetDisplayName-- 서비스의 DisplayName을 가져옵니다. GetKeyName ------ 서비스의 ServiceKeyName을 가져옵니다. EnumDepend ------ 서비스 종속성을 열거합니다. 다음 명령에는 서비스 이름이 필요하지 않습니다. sc <서버> <명령> <옵션> boot ------------ (ok | bad) 마지막 부팅 여부를 나타냅니다 마지막으로 성공한 부팅 구성으로 저장 잠금 ------------ 서비스 데이터베이스를 잠급니다 QueryLock ------- SCManager 데이터베이스의 잠금 상태를 쿼리합니다. 예: sc 시작 MyService
답변
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
2015 년 4 월 4 일 수정
리턴 코드 :
NET 명령은 문서화 된 Win32_Service 클래스 리턴 코드 (Service Not Active, Service Request Timeout 등)를 리턴하지 않으며 많은 오류에 대해 단순히 Errorlevel 2를 리턴합니다.
여기를보십시오 : http://ss64.com/nt/net_service.html
답변
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%
면책 조항 : 나는 이것을 머리 꼭대기에서 썼지 만 효과가 있다고 생각합니다.
답변
코드를 확인하는 대신 작동합니다.
net start "Apache tomcat" || goto ExitError
:End
exit 0
:ExitError
echo An error has occurred while starting the tomcat services
exit 1
답변
나는 이것을 위해 내 개인 배치 파일을 만들었습니다.내는 조금 다르지만 자유롭게 볼 수 있도록 수정하십시오. 나는 지루하고 사람들이 엔딩, 시작, 중지 또는 자동으로 입력 할 수있는 간단한 방법을 원했기 때문에 조금 전에 이것을 만들었습니다. 이 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
답변
에서 반환 코드를 사용 net start
하고하는 것은 net stop
나에게 가장 좋은 방법처럼 보인다. Net Start return codes를 살펴보십시오 .
답변
문법은 항상 나를 얻는다.
다음은 두 시스템의 관리자 인 경우 .bat를 관리자로 실행하고 시스템이 동일한 도메인에있는 경우 배치 파일에 행을 추가하여 다른 시스템에서 원격 서비스를 종료하는 방법입니다. 컴퓨터 이름은 UNC 형식 \ myserver를 따릅니다.
sc \\ip.ip.ip.ip stop p4_1
이 경우 … Service Manager에서 서비스 속성을 볼 때 p4_1은 서비스 이름과 표시 이름입니다. 서비스 이름을 사용해야합니다.
서비스 운영 마약 중독자의 경우 이유 코드와 의견을 추가하십시오! 즉, ‘계획’과 동일한 ‘4’및 ‘유지 보수를위한 서버 중지’
sc \\ip.ip.ip.ip stop p4_1 4 Stopping server for maintenance