배치 또는 cmd 파일을 통해 서비스를 중지하고 시작 하시겠습니까?


288

박쥐 또는 cmd를 스크립팅하여 오류 검사를 통해 안정적으로 서비스를 중지하고 시작하려면 어떻게해야합니까 (또는 어떤 이유로 든 성공하지 못했음을 알려주세요)?


아마도 batoff와 cmd 명령을 요구하기 때문에 다소 주제가 맞지 않지만 PowerShell 은 이와 같은 작업을 수행하기위한 많은 제어 및 피드백을 제공합니다.
— GvS

답변:


347

사용 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

1
이것이 순 시작 / 정지보다 낫다는 데 동의합니다. 원격 컴퓨터에서도 서비스를 터치 할 수있는 옵션이 있습니다.
— 무법자 프로그래머

1
좋은 대답입니다. 그러나 'SC start service'를 실행하려면 관리자 여야합니다. 그에 대한 해결책을 찾을 여기을 (허용 대답이 솔루션을 포함).
— 마이클 K.에게

56
SC의 문제점은 작업이 완료된 후가 아니라 명령이 즉시 반환된다는 것입니다. 배치 파일을 통해 서비스를 다시 시작하려면 (중지 후 시작) 중지가 즉시 리턴되고 서비스가 중지되지 않아 시작이 실패합니다. 조치가 완료된 후 Net Stop / Start가 리턴되므로이 문제점이 없습니다.
— Dom

cmd를 관리자 모드로 열어 오류가 발생했습니다.이 명령의 구문은 다음과 같습니다. NET STOP 서비스
— Satish Singh

서비스가 제대로 중지되었는지 확인하는 방법이 있습니까 ?? 2020 년에?
— Anand Varkey Philips

212
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


1
NET 없는 동안 만 서비스 관련 기능 SC 입니다 단지 서비스 관련 기능.
— Wernight

3
이 답변은 "net"명령이 차단되고 배치 스크립트가 계속 실행되기 전에 서비스가 시작 또는 중지 될 때까지 기다리는 것이 좋습니다.
— Steven

(Edit가 말했듯이) errorlevel반환 된 대부분의 시간 이 2이므로 여기에서 오류 결과를 해석하는 방법을 참조하십시오 .
— HeyJude

28

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%

면책 조항 : 나는 이것을 머리 꼭대기에서 썼지 만 효과가 있다고 생각합니다.


8

코드를 확인하는 대신 작동합니다.

net start "Apache tomcat" || goto ExitError

:End  
exit 0  

:ExitError  
echo An error has occurred while starting the tomcat services  
exit 1  

7

나는 이것을 위해 내 개인 배치 파일을 만들었습니다.내는 조금 다르지만 자유롭게 볼 수 있도록 수정하십시오. 나는 지루하고 사람들이 엔딩, 시작, 중지 또는 자동으로 입력 할 수있는 간단한 방법을 원했기 때문에 조금 전에 이것을 만들었습니다. 이 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

1
일반적으로 코드 전용 답변은 인정되지 않습니다. 솔루션을 자세히 설명하거나 설명을 추가 할 수 있습니까?
— earwig

2
나는 지루하고 사람들이 엔딩, 시작, 중지 또는 자동으로 입력 할 수있는 간단한 방법을 원했기 때문에 조금 전에 이것을 만들었습니다. 이 BAT 파일은 단순히 서비스 이름을 입력하도록 요청하고 나머지는 자동으로 수행합니다.
— Nathanial Wilson

6

에서 반환 코드를 사용 net start하고하는 것은 net stop나에게 가장 좋은 방법처럼 보인다. Net Start return codes를 살펴보십시오 .


2
연결된 페이지가 더 이상 존재하지 않습니다. 따라서 이것은 현재 더 많은 의견입니다.
— Neolisk

5

문법은 항상 나를 얻는다.

다음은 두 시스템의 관리자 인 경우 .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

1
다른 사용자 ID와 비밀번호를 사용하여 로그온해야하는 경우 어떻게해야합니까?
— Frantumn

1
비밀번호를 입력하여 CMD다른 사용자 / ID로 실행 runas /user:Domain\UserName cmd하십시오. CMD가 지정된 사용자 계정으로 실행되기 시작합니다.
— user4317867

4

"net stop"이 서비스를 중지시킬 것이라고 생각하고 싶습니다. 슬프게도 현실은 그다지 흑백이 아닙니다. 서비스를 중지하는 데 시간이 오래 걸리면 서비스가 중지되기 전에 명령이 반환됩니다. 그러나 오류 수준을 확인하지 않으면 알 수 없습니다.

해결책은 서비스가 중지 될 때까지 루프 상태를 돌릴 때마다 일시 중지되어 서비스 상태를 찾는 것입니다.

그러나 다시 ...

첫 번째 서비스를 중지하는 데 오랜 시간이 걸리고 후속 서비스의 "net stop"은 아무 것도 수행하지 않는 것 같습니다. 서비스 관리자에서 서비스를보고 상태는 여전히 "시작됨"이며 "중지"로 변경되지 않습니다. 그러나 SCM을 사용하여이 두 번째 서비스를 수동으로 중지 할 수 있으며 3 또는 4 초 안에 중지됩니다.


3

또는이 cmd를 사용하여 원격 서비스를 시작할 수 있습니다. sc \\<computer> start <service>


3

위의 Jonas 예제를 사용하여 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반대로 작동합니다.


3

수동 서비스 다시 시작은 괜찮습니다. services.msc에는 "다시 시작"버튼이 있지만 명령 줄에서 sc와 net 명령 모두에 "다시 시작"스위치가없고 cmd / bat 파일에서 다시 시작이 예약 된 경우 서비스가 즉시 중지되고 시작되는 경우가 있습니다. 서비스가 아직 중지되지 않았기 때문에 오류가 발생하면 작업을 종료하는 데 시간이 걸립니다.

오류가 발생할 수 있습니다. sc stop sc start

시간 초과를 삽입하는 것이 좋습니다. 핑 (1 초마다 핑)을 사용합니다. sc 중지 ping localhost -n 60 sc start


2

batch를 사용하여 시스템 복원을 시작하는 Windows 10 명령은 다음과 같습니다.

sc config swprv start= Auto

이러한 명령을 좋아할 수도 있습니다.

  • 시스템 복원을 자동으로 시작하도록 레지스트리 값 변경

    REG ADD "HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ SystemRestore"/ v DisableSR / t REG_DWORD / d 0 / f

  • 시스템 복원 지점 생성

    Wmic.exe / Namespace : \ root \ default 경로 SystemRestore 호출 CreateRestorePoint "djibe 저장 한 PC", 100, 12

  • 시스템 복원 디스크 사용량 변경

    vssadmin 섀도 저장소 크기 조정 / for = C : / on = C : / maxsize = 10 %

즐겨


1

SC 시작, 중지, 확인, 구성 등의 서비스로 모든 작업을 수행 할 수 있습니다 ...


1

때때로 당신은 정지가 작동하지 않는 것을 찾을 수 있습니다 ..

내 SQlServer가 때때로 이것을 수행합니다. 다음 명령 줄을 사용하면 명령 줄이 종료됩니다. 멈추지 않는 것을 죽이는 스크립트가 정말로 필요한 경우. 나는 이것을 최후의 수단으로 할 것입니다.

taskkill /pid [pid number] /f

0

C #에서 Windows 서비스를 작성 중입니다. 중지 / 제거 / 빌드 / 설치 / 시작 루프가 너무 지쳤습니다. 미니 스크립트를 작성했습니다.reploy.bat 하여 루프를 자동화하기 위해 Visual Studio 출력 디렉토리 (내장 된 서비스 실행 파일이있는 디렉토리)에 드롭했습니다.

이 3 가지 변수를 설정하십시오.

servicename : Windows 서비스 제어판 (services.msc)에 표시됩니다.

slndir : 솔루션 (.sln) 파일이 포함 된 폴더 (전체 경로 아님)

binpath : 빌드에서 서비스 실행 파일의 전체 경로 (폴더 경로가 아님)

참고 : msbuild명령이 작동 하려면 Visual Studio Developer 명령 줄에서 실행해야합니다.

SET servicename="My Amazing Service"
SET slndir="C:dir\that\contains\sln\file"
SET binpath="C:path\to\service.exe"
SET currdir=%cd%

call net stop %servicename%
call sc delete %servicename%
cd %slndir%
call msbuild 
cd %bindir%
call sc create %servicename% binpath=%binpath%
call net start %servicename%
cd %currdir%

어쩌면 이것은 누군가를 도울 수 있습니다 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.