[windows] 서비스가 배치 파일을 통해 실행 중인지 확인하고 실행 중이 아닌 경우 시작하는 방법은 무엇입니까?

다음 작업을 수행하는 배치 파일을 작성하고 싶습니다.

  • 서비스가 실행 중인지 확인
    • 실행 중이면 배치를 종료하십시오.
    • 실행 중이 아니면 서비스를 시작하십시오.

지금까지 검색 한 코드 샘플이 작동하지 않는 것으로 밝혀져 게시하지 않기로 결정했습니다.

서비스 시작은 다음을 통해 수행됩니다.

net start "SERVICENAME"
  1. 서비스가 실행 중인지 확인하고 배치 파일에서 if 문을 만드는 방법은 무엇입니까?
  2. 조금 혼란 스러워요. 넷 스타트에 전달해야하는 주장은 무엇입니까? 서비스 이름 또는 표시 이름?



답변

서비스 상태를 확인하려면을 사용하십시오 sc query <SERVICE_NAME>. 배치 파일의 if 블록에 대해서는 문서를 확인하십시오 .

다음 코드는 서비스의 상태를 확인하고 MyServiceName실행 중이 아니면 시작합니다 (서비스가 실행 중이 아니면 if 블록이 실행 됨).

for /F "tokens=3 delims=: " %%H in ('sc query "MyServiceName" ^| findstr "        STATE"') do (
  if /I "%%H" NEQ "RUNNING" (
   REM Put your code you want to execute here
   REM For example, the following line
   net start "MyServiceName"
  )
)

그것이하는 일에 대한 설명 :

  1. 서비스의 속성을 쿼리합니다.
  2. “STATE”텍스트가 포함 된 줄을 찾습니다.
  3. 해당 라인을 토큰 화하고 서비스 상태를 포함하는 세 번째 토큰을 꺼냅니다.
  4. 문자열 “RUNNING”에 대해 결과 상태를 테스트합니다.

두 번째 질문에 관해서는, 당신이 전달하려는 것 인수는 net start서비스 이름입니다 하지 표시 이름.


답변

서비스를 전환하려면 다음을 사용하십시오.

NET START “분산 트랜잭션 코디네이터”|| NET STOP “분산 트랜잭션 코디네이터”


답변

다음 명령을 사용하여 서비스가 실행 중인지 여부를 확인할 수 있습니다.

sc query [ServiceName] | findstr /i "STATE"

NOD32 Antivirus를 실행하면 다음과 같은 결과가 나타납니다.

STATE                       : 4 RUNNING

중지 된 경우 다음과 같이 표시됩니다.

STATE                       : 1 STOPPED

이를 변수에 사용하여 NET START를 사용할지 여부를 결정할 수 있습니다.

서비스 이름은 표시 이름이 아닌 서비스 이름이어야합니다.


답변

그렇게해야합니다.

FOR %%a IN (%Svcs%) DO (SC query %%a | FIND /i "RUNNING"
IF ERRORLEVEL 1 SC start %%a)


답변

언어 독립적 버전.

@Echo Off
Set ServiceName=Jenkins


SC queryex "%ServiceName%"|Find "STATE"|Find /v "RUNNING">Nul&&(
    echo %ServiceName% not running
    echo Start %ServiceName%

    Net start "%ServiceName%">nul||(
        Echo "%ServiceName%" wont start
        exit /b 1
    )
    echo "%ServiceName%" started
    exit /b 0
)||(
    echo "%ServiceName%" working
    exit /b 0
)


답변

방금이 스레드를 찾았고 사용자가 배치 파일을 사용하여 서비스를 다시 시작하지 않으려는 경우 토론에 추가하고 싶었습니다. Windows에는 서비스, 서비스 속성, 복구로 이동하는 옵션이 있습니다. 여기에서 서비스에 대한 매개 변수를 설정할 수 있습니다. 서비스가 중지되면 서비스를 다시 시작합니다. 또한 컴퓨터를 다시 시작할 때와 다른 작업을 두 번째 실패로 시도 할 수도 있습니다.


답변

Cuando se는 Windows en Español, el código debe quedar asi를 사용합니다 (스페인어로 Windows를 사용하는 경우 코드는 다음과 같습니다).

for /F "tokens=3 delims=: " %%H in ('sc query MYSERVICE ^| findstr "        ESTADO"') do (
  if /I "%%H" NEQ "RUNNING" (
    REM Put your code you want to execute here
    REM For example, the following line
    net start MYSERVICE
  )
)

Reemplazar MYSERVICE con el nombre del servicio que se desea procesar. Puedes ver el nombre del servicio viendo las propiedades del servicio. (MYSERVICE를 처리 할 서비스 이름으로 바꾸십시오. 서비스 속성에서 서비스 이름을 볼 수 있습니다.)