NSSM을 사용하여 창 10에서 서비스를 시작할 수 없습니다


2

테스트 할 작은 스크립트 파일을 작성했습니다.

이것은 내 script.bat 파일입니다.

sc create myService binpath= C:\Users\Admin\Desktop\test.bat start= auto 

이것은 내 test.bat 파일입니다.

echo "Welcome to Wizard"

문제 설명

제어판 서비스 섹션 에서 서비스를 시작할 수 없습니다 .

다음과 같은 오류가 발생합니다.

[SC] StartService FAILED 1053 : 서비스가 시작 또는 제어 요청에 적시에 응답하지 않았습니다.

이것이 내가 nssm을 사용하는 이유입니다.

이제 일어나고있는 일은 powershell에서 다음 명령을 실행할 때입니다.

. \ nssm install myService , 대화 상자가 나타납니다. 스크립트 파일의 경로를 지정하고 설치 서비스를 클릭하십시오.

서비스를 성공적으로 설치 한 후 제어판으로 이동-> 서비스-> myService 에 대해 시작을 클릭 하지만 일시 중지되고 다음 대화 상자가 나타납니다.

로컬 컴퓨터에서 창에서 myService 서비스를 시작할 수 없습니다. 서비스가 오류를 반환하지 않았습니다. Windows 오류 또는 내부 서비스 오류 일 수 있습니다. 문제가 지속되면 시스템 관리자에게 문의하십시오.

  1. 이 문제를 어떻게 해결할 수 있습니까?
  2. 수동 단계를 수행하지 않고 타사 도구를 사용하지 않고 다른 방법을 사용할 수 있습니까?
  3. 이 작업을 창 10에서 수행하고 있습니다.이 작업을 수행하려면 서버가 필요합니까?

참고 : 필자의 경우 Always Up 또는 창 스케줄러를 사용할 수 없습니다.


해결 방법은 간단한 EXE 또는 배치 파일을 가리키는 EXE로 변환 된 배치 스크립트와 함께 사용할 수 있으며 배치 파일의 논리를 적절히 조정할 수 있습니다. CMD 파일을 exe로 변환하고 배치 파일을 가리키는 AutoIT exe 로이 작업을 수행했습니다. 이 작업을 다시 수행 해야하는 경우 배치 파일의 전체 경로를 exe로 전달하고 테스트를 sc통해 전달되는 인수 또는 다른 항목으로 exe를 호출 할 수 있는지 확인합니다 . 당신이 논리를 현명하게 사용하고 있는지 확실하지 않지만 개인적으로 비슷한 간단한 작업을 수행했습니다.
Pimp Juice IT

@ McDonald 's의 Miki는 NSSM (Non Sucking Service Manager)을 사용하고 있으며, 이는 서비스 또는 서비스로 사용될 수 있도록 실행 파일 또는 스크립트를 둘러싸는 래퍼입니다.
andyb

NSSM이 Windows OS에서이 서비스를 관리하지 않거나 서비스 프로세스를 사용 sc.exe및 / 또는 services.msc관리하는 이유에 대한 제품 학습 자료를 찾고 있습니까?
Pimp Juice IT

@ mcdonald 's, 이것에 대한 나의 독서는 Miki가 'SC'를 사용하여 배치 파일을 서비스로 설치하려고 시도했지만 이것이 작동하지 않는다는 것을 깨달았습니다. 그런 다음 솔루션을 찾고 NSSM을 발견했습니다. 이 응용 프로그램은 비 서비스 응용 프로그램의 래퍼 역할을하며 배치 파일을 시작하기 위해 CMD.EXE를 사용하기에 충분히 똑똑합니다. 이것은 NSSM 웹 사이트에서 모두 다룹니다. 배치 파일로 직접 시도해 보았습니다.
andyb

@andyb 아마도 여전히 나에게 약간 불분명 한 것처럼 보이므로 OP가 다시 올 때 OP가 말한 내용 등을 볼 수 있습니다.
Pimp Juice IT

답변:


2

NSSM 동작은 스크립트가 거의 즉시 종료되기 때문에 발생합니다. 다음 스크립트를 시도하십시오.

echo Hello World
pause

서비스가 시작될 수 있지만 반드시 콘솔 창이 표시되는 것은 아닙니다. '서비스가 데스크톱과 상호 작용하도록 허용'을 선택하더라도 상호 작용하는 데스크톱이 아닙니다!

SysInternals Process Explorer를 사용하면 스크립트를 실행하는 CMD 하위 프로세스로 NSSM 서비스가 실행되는 것을 볼 수 있습니다.

Windows는 '세션 제로 격리'를 보안 기능으로 구현하므로 서비스가 최종 사용자 데스크톱과 상호 작용하지 못하게합니다.

솔루션 측면에서 Visual Studio를 사용하여 Windows '서비스'응용 프로그램을 상당히 간단하게 작성할 수 있습니다. 그것은 내 전문 분야의 외부에 있지만 친숙한 Windows 응용 프로그램을 기반으로 일반적으로 데스크톱 상호 작용을 제공하기 위해 사용자 모드 응용 프로그램을 실행합니다. 사용자 모드 응용 프로그램은 서비스 응용 프로그램에서 호스팅하는 서비스와 상호 작용할 수 있습니다.


1

Windows 서비스는 몇 가지 표준 이벤트 (예 : OnStart OnStop, OnPause, OnContinue)를 지원해야하는 실행 프로그램입니다. .bat 파일은 실행 파일이 아니며 실제로 서비스로 실행되도록 할 수는 없습니다.

bat 파일을 실행할 때 실행되는 실제 프로그램은 cmd.exe이지만 필요한 이벤트를 지원하지 않습니다.

C ++ 또는 C # 또는 다른 많은 언어를 사용하여 Windows 서비스를 작성한 다음 cmd.exe에서 bat 파일을 실행하도록 서비스를 프로그래밍 할 수 있습니다. 그러나 서비스가 화면이나 키보드에 액세스 할 수 없으므로 박쥐 파일이 작동하지 않습니다.

TL; DR : 작동하지 않을 것입니다. 아마도 실제로하려는 일에 대해 다른 질문을 제기한다면 어쩌면? 서비스를 솔루션으로 생각하고 문제를 설명하지 않은 것 같습니다.


1
OP는 배치 파일을 서비스로 실행할 수있는 NSSM을 사용하고 있습니다. 배치가 거의 즉시 종료되기 때문에이 인스턴스에서는 실패합니다. NSSM의 기본 동작은이 동작을 볼 때 일시 중지 된 상태가되는 것입니다.
andyb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.