programing

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

padding 2023. 5. 8. 21:57
반응형

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

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

을 합니다.SC(서비스 제어) 명령, 단순한 것보다 훨씬 더 많은 옵션을 제공합니다.start&stop.

설명:SC는 다음과 통신하는 데 사용되는 명령줄 프로그램입니다.NT 서비스 컨트롤러 및 서비스.
용도:sc <server> [command] [서비스 이름] ...

<server> 옵션의 형식은 "\\ServerName"입니다."sc [command]"를 입력하여 명령에 대한 추가 도움말을 얻을 수 있습니다.
명령:
query----------- 서비스 상태를 쿼리합니다.서비스 유형의 상태를 열거합니다.
queryx----------- 서비스에 대한 확장 상태를 쿼리합니다.서비스 유형의 상태를 열거합니다.
start--------------- 서비스를 시작합니다.
pause--------------------------------------------------------------------
Question------- 서비스에 질문 제어 요청을 보냅니다.
continue--------계속 제어 요청을 서비스로 보냅니다.
stop--------------서비스에 STOP 요청을 보냅니다.
config----------C 서비스(중대)의 구성을 변경합니다.
description-----C 서비스에 대한 설명이 변경됩니다.
failure---------C는 장애 발생 시 서비스에서 수행하는 작업을 중단합니다.
qc------------- 서비스에 대한 구성 정보를 쿼리합니다.
qdescription----서비스에 대한 설명을 쿼리합니다.
qfailure--------- 장애 발생 시 서비스에서 수행한 작업을 쿼리합니다.
delete--------- 서비스를 레지스트리에서 삭제합니다.
create--------C 서비스를 만듭니다.(레지스트리에 추가).
control------------- 서비스로 컨트롤을 보냅니다.
sdshow----------서비스의 보안 설명자를 표시합니다.
sdset------------------- 서비스의 보안 설명자를 설정합니다.
GetDisplayName--서비스의 DisplayName을 가져옵니다.
GetKeyName------서비스에 대한 ServiceKeyName을(를) 가져옵니다.
EnumDependence------서비스 종속성을 열거합니다.

다음 명령에는 서비스 이름이 필요하지 않습니다.
sc <서버> <명령> <옵션>boot------------(ok | bad) 마지막 부팅을 해야 하는지 여부를 나타냅니다.마지막으로 성공한 부팅 구성으로 저장됩니다.잠금-------------서비스 데이터베이스를 잠급니다.QueryLock-------SCManager 데이터베이스의 잠금 상태를 쿼리합니다.예:sc 시작 내 서비스
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은 성공을 나타냅니다.더 높은 값은 실패를 나타냅니다.

박쥐파는로일는▁as.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.04.20 편집

반품 코드:

NET 명령은 문서화된 Win32_Service 클래스 반환 코드(Service Not Active, Service Request Timeout 등)를 반환하지 않으며 많은 오류의 경우 오류 수준 2만 반환합니다.

여기를 보세요: http://ss64.com/nt/net_service.html

NET START 명령을 사용한 다음 ERRORLEVEL 환경 변수(예: ERRORLEVEL)를 확인할 수 있습니다.

net start [your service]
if %errorlevel% == 2 echo Could not start service.
if %errorlevel% == 0 echo Service started successfully.
echo Errorlevel: %errorlevel%

고지 사항:이 글은 제가 머리 위에서 썼지만, 효과가 있을 것 같습니다.

저는 이것을 위해 개인 배치 파일을 만들었습니다, 제 것은 조금 다르지만 당신이 적합하다고 생각하는 대로 자유롭게 수정하세요.저는 조금 전에 이것을 만들었습니다. 심심해서 사람들이 종료, 시작, 중지 또는 설정을 자동으로 입력할 수 있는 간단한 방법을 만들고 싶었기 때문입니다.이 BAT 파일은 사용자가 서비스 이름을 입력하도록 요청하기만 하면 나머지 작업을 수행합니다.저는 그가 어떤 오류가 있는 것을 찾고 있는지 몰랐습니다, 제가 그 부분을 잘못 읽었나 봐요.일반적으로 >> 출력을 입력하여 수행할 수 있습니다.줄의 끝에 있는 txt.

%var%는 사용자가 다른 서비스를 시작/중지할 때마다 배트 파일을 수정할 필요 없이 자신의 서비스를 입력할 수 있는 방법입니다.

제가 틀렸다면, 누구나 자유롭게 저를 바로잡을 수 있습니다.

@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 "Apache tomcat" || goto ExitError

:End  
exit 0  

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

의 반환 net start그리고.net stop제게는 가장 좋은 방법인 것 같습니다.이것을 확인해 보십시오.Net Start 리턴 코드.

구문론은 항상 나를... 그래서...

두 시스템 모두에서 관리자인 경우 .bat을 관리자로 실행하고 시스템이 동일한 도메인에 있는 경우 원격 서비스(다른 시스템에서)를 종료하는 배치 파일에 줄을 추가하는 방법을 명시적으로 설명합니다.시스템 이름은 UNC 형식 \myserver를 따릅니다.

sc \\ip.ip.ip.ip stop p4_1

이 경우에는...서비스 관리자에서 서비스의 속성을 볼 때 p4_1은 서비스 이름과 표시 이름 모두였습니다.서비스 이름을 사용해야 합니다.

당신의 서비스 작전 중독자들을 위해...이유 코드를 추가하고 주석을 달아야 합니다. 즉, '계획됨'과 동일한 '4'와 '유지관리를 위해 서버 중지'에 주석을 달아야 합니다.

sc \\ip.ip.ip.ip stop p4_1 4 Stopping server for maintenance

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

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

하지만 또다시...

첫 번째 서비스는 중지하는 데 오랜 시간이 걸리고, 다음 서비스에 대한 "순 중지"는 아무 것도 하지 않는 것처럼 보입니다.서비스 관리자에서 서비스를 확인합니다. 서비스 상태는 여전히 "시작됨" - "중지"로 변경되지 않습니다.하지만 SCM을 사용하여 이 두 번째 서비스를 수동으로 중지할 수 있으며, 3~4초 후에 중지됩니다.

cmd로 할 수 .sc \\<computer> start <service>

저는 위의 Jonas의 예를 사용하여 0에서 24개의 오류 수준의 전체 목록을 만들었습니다.다른 게시물은 정확합니다.net start그리고.net stop오로지 사용errorlevel0은 성공이고 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%

stopstart반대로 작동합니다.

수동 서비스 다시 시작은 정상입니다. - services.msc에는 "다시 시작" 버튼이 있지만 명령줄에 검색 및 net 명령 모두 "다시 시작" 스위치가 없으며, 다시 시작이 cmd/bat 파일로 예약된 경우 서비스가 중지 및 즉시 시작됩니다. 서비스가 아직 중지되지 않았기 때문에 시스템을 종료할 시간이 필요할 수 있습니다.

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

시간 초과를 삽입하는 것이 좋습니다. I 사용(1초마다 호출): sc stopping localhost - n 60 sc start

다음은 배치를 사용하여 시스템 복원을 시작하는 Windows 10 명령입니다.

sc config swprv start= Auto

다음 명령도 사용할 수 있습니다.

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

    REG ADD "HKLM\SOFTWARE\Microsoft\"Windows NT\현재 버전\시스템 복원" /v SR 사용 안 함 /t REG_DWORD /d 0 /f

  • 시스템 복원 지점 만들기

    Wmic.exe /Namespace:\root\default Path SystemRestore 호출 CreateRestorePoint "djibe saved your PC", 100, 12

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

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

즐거운 시간 되세요.

  1. SC
  2. NET 중지/시작
  3. Ps 서비스
  4. WMIC
  5. 파워셸은 또한 사용하기 쉬운 옵션입니다.

SC와 NET은 이미 앤서로 제공됩니다.PsService는 몇 가지 깔끔한 기능을 추가하지만 Microsoft에서 다운로드해야 합니다.

그러나 WQL 구문을 사용하면 한 줄 이상의 서비스를 강력하게 관리할 수 있으므로 WMI를 사용하는 것이 좋습니다(WMI 개체는 powershell/vbscript/jscript/c#을 통해서도 사용할 수 있습니다).

가장 쉬운 사용 방법:

wmic service MyService call StartService
wmic service MyService  call StopService

WQL을 사용한 예

wmic service where "name like '%%32Time%%' and ErrorControl='Normal'" call StartService

다음을 포함하는 이름을 가진 모든 서비스가 시작됩니다.32Time정상적인 오류 제어가 가능합니다.

사용할 수 있는 방법은 다음과 같습니다.

포함:

wmic service get /FORMAT:VALUE

서비스에 대한 사용 가능한 정보를 볼 수 있습니다.

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

때때로 당신은 그 정류장이 작동하지 않는다는 것을 발견할 수 있습니다.

SQL Server에서 이 작업을 수행할 때가 있습니다.다음 명령행을 사용하면 해당 명령행이 종료됩니다.만약 당신이 정말로 무언가를 죽이기 위해 대본이 필요하다면 그것은 멈추지 않습니다.최후의 수단으로 이걸 했으면 합니다.

taskkill /pid [pid number] /f

C#로 윈도우 서비스를 작성하고 있는데, stop/uninstall/build/install/start 루프가 너무 힘들어졌습니다.미니 대본을 쓰고, 그것이라고 부릅니다.reploy.batVisual Studio 출력 디렉터리(기본 서비스 실행 파일이 있는 디렉터리)에 저장하여 루프를 자동화합니다.

이 세 개의 변수만 설정하면 됩니다.

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

slndir솔루션(.sln) 파일이 들어 있는 폴더(전체 경로가 아님)

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

참고: 이 작업은 Visual Studio Developer 명령줄에서 실행해야 합니다.msbuild근무 명령

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%

아마도 이것은 누군가에게 도움이 될 것입니다 :)

만족스러운 솔루션을 제공할 수 있는 위의 답변을 찾지 못해 다음 배치 스크립트를 작성했습니다.

:loop
net stop tomcat8 
sc query tomcat8 | find "STOPPED"
if errorlevel 1 (
  timeout 1
  goto loop
)
:loop2
net start tomcat8
sc query tomcat8 | find "RUNNING"
if errorlevel 1 (
  timeout 1
  goto loop2
)

서비스 상태가 중지될 때까지 net stop을 계속 실행하고, 상태가 중지된 후에만 net start를 실행합니다.서비스를 중지하는 데 시간이 오래 걸리는 경우 Net Stop이 실패로 종료될 수 있습니다.어떤 이유로 서비스가 성공적으로 시작되지 않으면 상태가 실행될 때까지 서비스 시작을 계속 시도합니다.

이를 통해 서비스가 필요한 서비스 또는 프로그램을 시작할 수 있습니다.

@echo
taskkill /im service.exe /f
taskkill /im service.exe /f
set "reply=y"
set /p "reply=Restart service? [y|n]: "
if /i not "%reply%" == "y" goto :eof
cd "C:\Users\user\Desktop"
start service.lnk
sc start service
eof
exit

언급URL : https://stackoverflow.com/questions/133883/stop-and-start-a-service-via-batch-or-cmd-file

반응형