NSSM은 SRVANY 및 CYGRUNSRV와 유사한 서비스 도우미 프로그램입니다. NT 서비스로 응용 프로그램 (예 : 콘솔)을 시작할 수 있으며 어떤 이유로 든 실패한 경우 서비스를 다시 시작합니다.
NSSM에는 그래픽 서비스 설치 프로그램 및 리무버도 있습니다.
이것은 NSSM의 포크입니다
릴리스에서 찾을 수있는 이진 파일
원본 코드 : Iain Patterson의 https://git.nssm.cc/nssm/nssm
문서 : 사용법, 명령
아래의 사용 메모에서 프로그램에 대한 인수는 각도 괄호 및/또는 사각형 괄호로 작성 될 수 있습니다. 적절한 문자열을 삽입해야하며 []는 문자열이 선택 사항임을 의미합니다. 아래 예제를 참조하십시오 ...
모든 곳에서 나타나는 곳에서는 서비스의 디스플레이 이름을 대체 할 수 있습니다.
서비스를 설치하려면 실행하십시오
nssm install <servicename>
실행하려는 응용 프로그램의 전체 경로를 입력하라는 메시지와 해당 응용 프로그램으로 전달할 명령 줄 옵션이 있습니다.
System Service Manager (Services.msc)를 사용하여 시작 방법 및 데스크탑 상호 작용과 같은 고급 서비스 속성을 제어하십시오. NSSM은 나중에 이러한 옵션을 지원할 수 있습니다 ...
서비스를 설치하려면 실행하십시오
nssm install <servicename> <application> [<options>]
그런 다음 NSSM은 주어진 옵션으로 지명 된 응용 프로그램을 실행하는 서비스를 설치하려고 시도합니다 (지정된 경우).
공백이 포함 된 경우 "인용문"에 경로를 동봉하는 것을 잊지 마십시오!
옵션에 따옴표를 포함하려면 "" "quote" "" "인용문이 필요합니다.
NSSM은 시작 신호를 보낼 때 레지스트리에 나열된 응용 프로그램을 시작하고 정지 신호를 보낼 때 종료됩니다. 지금까지 Srvany와 매우 흡사합니다. 그러나 NSSM은 신청하지 않는 서비스 관리자이며 응용 프로그램이 사망 할 때 조치를 취할 수 있습니다.
귀하의 구성이 없으면 NSSM은 애플리케이션이 죽었다는 사실을 알았지 만 정지 신호를 보내지 않으면 스스로 재시작하려고합니다. NSSM은 서비스가 성공적으로 시작되거나 정지 신호를 보낼 때까지 각 시도 사이를 일시 중지하고 계속 시도합니다.
NSSM은 서비스가 최대 4 분까지 적시에 시작되지 않으면 후속 재시작 시도 사이에 점점 더 긴 시간을 일시 중지합니다. 이것은 실패한 응용 프로그램을 계속해서 시작하려는 과도한 양의 CPU 시간을 소비하지 않습니다. 실패의 원인을 식별하고 대기하고 싶지 않으면 Windows 서비스 콘솔 (서비스가 일시 정지 상태로 표시되는 곳)을 사용하여 계속 신호를 NSSM으로 보내고 몇 초 안에 재 시도 할 수 있습니다.
기본적으로 NSSM은 "적시 방식"을 1500 밀리 초 이내로 정의합니다. HKLM System CurrentControlset Services <서비스> 매개 변수 appthrottle의 레지스트리에서 밀리 초 수를 Registry에서 REG_DWORD 값으로 설정하여 서비스의 임계 값을 변경할 수 있습니다.
또는 NSSM은 응용 프로그램을 AppThrottle에서 지정된 시간 동안 성공적으로 실행하더라도 응용 프로그램을 다시 시작하려고 시도하기 전에 구성 가능한 시간 동안 일시 중지 할 수 있습니다. NSSM은 재시작을 시도하기 전에 대기 할 밀리 초에 대한 hklm system currentControlset Services <service> parameters apprestArtDelay의 reg_dword 값을 참조합니다. ApprestArtDelay가 설정되고 응용 프로그램이 스로틀링 대상으로 결정되면 NSSM은 구성된 재시작 지연과 계산 된 스로틀 기간의 더 긴 서비스를위한 서비스를 일시 중지합니다.
ApprestArtDelay가 누락되거나 유효하지 않은 경우 스로틀 만 적용됩니다.
NSSM은 hklm system currentControlset Services <service> parameters appExit for String (reg_expand_sz) 값에 따라 레지스트리에서 응용 프로그램의 종료 코드에 해당합니다. 예를 들어 코드 1과 같은 응용 프로그램이 코드 1으로 종료되면 NSSM은 "1"이라는 AppExit에서 문자열 값을 찾거나 찾지 못하면 AppExit (기본) 값으로 돌아갑니다. 시스템 이벤트 로그에 컨설팅하여 응용 프로그램의 종료 코드를 찾을 수 있습니다. 응용 프로그램이 종료되면 NSSM이 종료 코드를 기록합니다.
레지스트리에있는 데이터를 기반으로 NSSM은 세 가지 조치 중 하나를 취합니다.
값 데이터가 "재시작"인 경우 NSSM은 위에서 설명한대로 응용 프로그램을 다시 시작하려고합니다. 이것은 기본 동작입니다.
값 데이터가 "무시"인 경우 NSSM은 응용 프로그램을 다시 시작하지 않지만 계속 실행됩니다. 이것은 srvany의 (일반적으로 바람직하지 않은) 행동을 모방합니다. Windows Services Console은 응용 프로그램이 종료되었지만 서비스가 여전히 실행되는 것으로 표시됩니다.
값 데이터가 "종료"인 경우 NSSM은 우아하게 종료됩니다. Windows Services 콘솔은 서비스가 중지 된 것으로 표시됩니다. 서비스 복구에 대한 세밀한 제어를 제공하려면이 코드를 사용하고 실패 작업을 수동으로 편집해야합니다. Vista 이전의 Windows 버전은 그러한 출구가 실패로 간주되지 않습니다. 이전 버전의 Windows에서는 대신 "자살"을 사용해야합니다.
값 데이터가 "자살"인 경우 NSSM은 서비스 관리자에게 알리지 않고 충돌 및 종료를 시뮬레이션합니다. 이 옵션은 서비스 복구 조치를 적용하려는 전 예비 전 시스템에만 사용해야합니다. 모니터링 된 응용 프로그램이 코드 0으로 종료되면 NSSM은 종료 코드 0에 대한 레지스트리 키를 명시 적으로 구성하는 경우에만 자살 요청을 존중합니다. 기본 조치 만 자살로 설정된 경우 NSSM이 우아하게 종료됩니다.
NSSM은 관리 된 응용 프로그램의 우선 순위 클래스를 설정할 수 있습니다. NSSM은 reg_dword 항목 appPriority의 HKLM System CurrentControlset Services <service> 매개 변수 아래 레지스트리에서 살펴 봅니다. 유효한 값은 setPriorityClass ()에 대한 인수에 해당합니다. AppPriority ()에 누락되거나 유효하지 않은 경우 응용 프로그램은 정상 우선 순위로 시작됩니다.
NSSM은 관리되는 응용 프로그램의 CPU 친화력을 설정할 수 있습니다. NSSM은 reg_sz 항목 appaffinity에 대한 HKLM System CurrentControlset Services <service> 매개 변수 아래 레지스트리에서 살펴 봅니다. 제로 인덱스 프로세서 ID의 쉼표로 구분 된 나열된 나열을 지정해야합니다. 다양한 프로세서가 선택적으로 대시로 지정 될 수 있습니다. 문자열에는 다른 문자가 허용되지 않습니다.
예를 들어, 첫 번째를 지정합니다. 두번째; 세 번째와 다섯 번째 CPU, 적절한 appaffinity는 0-2,4입니다.
AppAffinity가 누락되거나 유효하지 않은 경우 NSSM은 응용 프로그램을 특정 CPU로 제한하려고 시도하지 않습니다.
64 비트 버전의 NSSM은 이러한 방식으로 최대 64 개의 CPU를 구성 할 수 있으며 32 비트 버전은 64 비트 Wind
서비스를 중지 할 때 NSSM은 모니터링 된 응용 프로그램을 죽이는 여러 가지 방법을 시도하며, 각각은 필요한 경우 비활성화 될 수 있습니다.
첫 번째 NSSM은 Control-C 이벤트를 생성하여 응용 프로그램의 콘솔로 보내려고합니다. 배치 스크립트 또는 콘솔 애플리케이션은 이벤트를 가로 채고 우아하게 스스로를 종료 할 수 있습니다. GUI 응용 프로그램에는 콘솔이 없으며이 방법에 응답하지 않습니다.
둘째, NSSM은 응용 프로그램에서 생성 된 모든 창을 열거하고 우아한 종료를 요청하여 WM_CLOSE 메시지를 보냅니다.
셋째, NSSM은 애플리케이션에서 생성 된 모든 스레드를 열거하고 우아한 종료를 요청하여 WM_QUIT 메시지를 보냅니다. 모든 응용 프로그램의 스레드에 메시지 대기열이있는 것은 아닙니다. 이 방법에 응답하지 않는 사람들.
마지막으로 NSSM은 종료 프로세스 ()를 호출하여 운영 체제가 응용 프로그램을 강제로 종료하도록 요청합니다. TerminateProcess ()는 갇히거나 무시할 수 없으므로 대부분의 상황에서는 응용 프로그램이 사망합니다. 그러나 종료하기 전에 Tidyup 작업을 수행 할 기회가 있다는 보장은 없습니다.
위의 방법 중 일부 또는 모든 방법이 비활성화 될 수 있습니다. NSSM은 HKLM System CurrentControlset Services <Service> Parameters AppStopMethodSkip 레지스트리 값을 찾아야합니다.
AppStopMethodSkip에 1이 포함 된 경우 Control-C 이벤트는 생성되지 않습니다. AppStopMethodSkip에 2가 포함 된 경우 WM_CLOSE 메시지가 게시되지 않습니다. AppStopMethodSkip에 4가 포함 된 경우 WM_QUIT 메시지가 게시되지 않습니다. AppStopMethodSkip에 8이 포함되면 TerminateProcess ()가 호출되지 않습니다.
예를 들어, 응용 프로그램이 Control-C 이벤트에 응답하지 않았고 스레드 메시지 큐가 없다는 것을 알고 있으면 AppStopMethodSkip을 5로 설정할 수 있으며 NSSM은 해당 메소드를 사용하여 응용 프로그램을 중지하지 않습니다.
AppStopMethodskip의 가치에 8을 포함시킬 때주의하십시오. NSSM이 전화를 걸지 않으면 종료 프로세스 () 서비스가 중지 될 때 응용 프로그램이 종료되지 않을 수 있습니다.
기본적으로 NSSM을 사용하면 다음 방법으로 진행하기 전에 1500ms가 위에서 설명한 각 방법에 응답 할 수 있습니다. hklm system currentControlset Services <ervice> 매개 변수 아래 레지스트리에서 reg_dword 항목을 작성하여 타임 아웃을 메드마다 구성 할 수 있습니다.
AppStopMethodConsole AppStopMethodWindow AppStopMethodThreads
각 값은 대기 할 밀리 초로 설정되어야합니다. 응용 프로그램의 프로세스 트리의 각 프로세스에 시간 초과가 적용되므로 실제 종료 시간은 응용 프로그램이 여러 하위 프로세스를 생성하는 경우 구성된 모든 시간 초과의 합보다 길 수 있습니다.
응용 프로그램의 프로세스 트리의 모든 프로세스에 위의 정지 메소드를 적용하려면 원래 응용 프로그램 프로세스에만 적용하려면 HKLM System CurrentControlset Services <service> 매개 변수 AppKillProcessTree 레지스트리 값을 설정하십시오.
기본적으로 NSSM은 콘솔 창을 만들어 사용자 입력을 읽을 수있는 응용 프로그램이이를 수행 할 수 있습니다. 서비스가 데스크탑과 상호 작용할 수 있습니다.
정수 (reg_dword) hklm System CurrentControlset Services <ervice> 매개 변수 appnoconsole 레지스트리 값 1으로 콘솔 생성을 억제 할 수 있습니다.
NSSM은 Managed Application의 I/O를 CreateFile ()에 의해 열 수있는 모든 경로로 리디렉션 할 수 있습니다. 예를 들어, 예를 들어 콘솔에만 쓰거나 직렬 포트에서 입력을 수락하는 응용 프로그램의 로그 출력을 캡처 할 수 있습니다.
NSSM은 hklm system currentcontrolset services <service> argureting a arguments to createFile ()에 해당하는 키에 대한 레지스트리에서 살펴 봅니다. 모두 선택 사항입니다. 특정 스트림에 대한 경로가 제공되지 않으면 리디렉션되지 않습니다. 경로가 제공되지만 다른 값 중 하나가 생략되면 합리적인 기본값을받습니다.
Appstdin : 입력을 수신하는 경로. AppstDout : 출력을 수신하는 경로. AppStderr : 오류 출력을받는 경로.
CreateFile ()의 매개 변수는 "AppStDinSharEmode", "AppStDinCreationDisPosition"및 "AppStDinflagsAndAttributes"값 (및 stdout 및 stderr의 유사)과 함께 제공됩니다.
일반적으로 서비스가 출력을 기록하고 AppStdout 및 AppStderr를 동일한 경로 (예 : C : Users Public Service.log)로 설정하려면 작동해야합니다. 그러나 서비스를 실행하는 사용자가 경로에 액세스 할 수 있어야합니다.
I/O 리디렉션을 사용하는 경우 NSSM은 STDOUT 및/또는 STDERR을 열기 전에 기존 출력 파일을 회전시킬 수 있습니다. 기존 파일의 마지막 쓰기 시간을 기준으로 접미사로 이름이 바뀌고 밀리 초 정밀도로 이름이 바뀝니다. 예를 들어, NSSSM.LOG 파일은 NSSM-20131221T113939.457.log로 회전 할 수 있습니다.
NSSM은 HKLM System CurrentControlset Services <service> REGOTION에서 회전이 발생하는 방법을 제어하는 reg_dword 항목에 대한 매개 변수로 레지스트리를 살펴 봅니다.
ApprotateFiles가 누락되었거나 0으로 설정된 경우 회전이 비활성화됩니다. 0이 아닌 값은 회전을 가능하게합니다.
Approtateseconds가 0이 아닌 경우 마지막 쓰기 시간이 과거에 주어진 초 수보다 적은 경우 파일이 회전되지 않습니다.
ApprotateBytes가 0이 아닌 경우 주어진 바이트 수보다 작은 경우 파일이 회전되지 않습니다. 64 비트 파일 크기는 aluthateByteshigh의 0이 아닌 값을 설정하여 처리 할 수 있습니다.
ApprotatedElay가 0이 아닌 경우 NSSM은 회전 후 주어진 밀리 초에 대해 일시 중지됩니다.
AppStDoutCopyAndTruncate 또는 AppStDerrcopyAndTruncate가 0이 아닌 경우, 먼저 파일의 사본을 가져 와서 원본 파일을 제로 크기로 잘라서 stdout (또는 stderr) 파일이 회전됩니다. 이를 통해 NSSM은 다른 프로세스에 의해 열려있는 파일을 회전시켜 일반적인 MoveFile ()가 성공하지 못하도록합니다. 파일이 큰 경우 복사 프로세스에 시간이 걸릴 수 있으며 원래 파일보다 두 배나 많은 디스크 공간을 일시적으로 소비합니다. 또한 로그 파일을 읽는 응용 프로그램에서는 파일 크기가 변경된 것을 알 수 없습니다. 이 옵션을 ApprotatedElay와 함께 사용하면이 경우 도움이 될 수 있습니다.
회전은 파일을 열는 데 사용되는 createFile () 매개 변수와 무관합니다. NSSM이 추가로 추가되었는지 또는 교체했는지 여부에 관계없이 회전됩니다.
NSSM은 서비스가 실행되는 동안 구성된 크기 임계 값에 도달하는 파일을 회전시킬 수도 있습니다. 또한 명령을 실행하여 주문형 회전을 트리거 할 수 있습니다.
nssm rotate <servicename>
다음 데이터 라인이 ApprotateBytes의 값에 관계없이 관리되는 애플리케이션에서 읽은 후에 주문형 회전이 발생합니다. 신청서가 특별히 장황하지 않으면 회전은 한동안 발생하지 않을 수 있습니다.
온라인 및 주문형 회전을 가능하게하려면 ApprotateOnline을 0이 아닌 값으로 설정하십시오.
온라인 회전을 위해서는 NSSM이 응용 프로그램의 I/O를 가로 채고 대신 출력 파일을 생성해야합니다. 응용 프로그램을 시작하기 전에 I/O 스트림을 간단히 리디렉션하는 것보다 더 복잡하고 오류가 발생합니다. 따라서 온라인 회전은 기본적으로 활성화되지 않습니다.
출력을 리디렉션 할 때 NSSM은 각 출력 라인을 밀리 초 프레임 타임 스탬프로 접두사 할 수 있습니다.
2016-09-06 10:17:09.451 Pipeline main started
타임 스탬프 접두사를 활성화하려면 apptimestamplog를 0이 아닌 값으로 설정하십시오.
접두사는 stdout과 stderr에 모두 적용됩니다. 접두사는 온라인 회전과 같은 방식으로 응용 프로그램의 I/O를 가로 채어야합니다. 로그 회전 및 타임 스탬프 접두사가 모두 활성화되면 회전이 온라인 상태가됩니다.
NSSM은 관리 된 응용 프로그램의 환경을 대체하거나 추가 할 수 있습니다. 두 개의 다중 값 문자열 (reg_multi_sz) 레지스트리 값은 HKLM System CurrentControlset Services <service> 매개 변수에서 인식됩니다.
Appenvironment는 서비스의 환경을 무시할 환경 변수 목록을 정의합니다. Appenvironmentextra는 서비스 환경에 추가 될 환경 변수 목록을 정의합니다.
목록의 각 항목은 형식 키 = 값이어야합니다. 값을 생략 할 수는 있지만 = 기호는 필수입니다.
Appenvironment 및 Appenvironmentextra에 나열된 환경 변수는 정상적인 확장에 따라 달라 지므로 예를 들어 Appenvironmentextra에서 "Path = C : bin;%Path%"를 설정하여 시스템 경로를 업데이트 할 수 있습니다. 변수는 나타나는 순서대로 확장되므로 다른 변수에 한 변수의 값을 포함하려면 먼저 종속성을 선언해야합니다.
Appenvironment에 정의 된 변수는 기존 환경을 무시하기 때문에 이전에 정의 된 변수를 참조 할 수 없습니다.
예를 들어, 다음의 Appenvironment 블록 :
PATH=C:WindowsSystem32;C:Windows
PATH=C:bin;%PATH%
예상대로 "c : bin; c : windows system32; c : windows"의 경로가 발생합니다.
반면 다음 Appenvironment 블록 :
PATH=C:bin;%PATH%
C : bin 만 포함하는 경로가 발생하고 아마도 응용 프로그램이 시작되지 않을 수 있습니다.
대부분의 사람들은 Appenvironmentextra를 독점적으로 사용하기를 원할 것입니다. Srvany는 Appenvironment 만 지원합니다.
버전 2.25 현재, NSSM Parses Appenvironment 및 Appenvironmentextra 자체는 다른 레지스트리 값을 읽기 전에. 결과적으로 이제 응용 프로그램, AppDirectory 및 기타 매개 변수에서 사용자 정의 환경 변수를 참조 할 수 있습니다.
모든 Windows 서비스는 HLKM System CurrentControlset Services <서비스> 환경이라는 다중 값 문자열 (reg_multi_sz) 레지스트리 값을 만들어 추가 환경 변수를 전달할 수 있습니다.
이 환경 블록의 내용은 서비스가 시작되기 전에 시스템 환경에 병합됩니다.
그러나 병합 된 환경은 처리되기 전에 알파벳순으로 정렬됩니다. 이는 실제로 환경 블록에서 DIR =%프로그램 파일%를 설정할 수 없음을 의미합니다. 환경이 서비스에 전달 된 환경이%DIR%를 정의 할 때까지%ProgramFiles%를 정의하지 않았기 때문입니다. Appenvironmentextra에 정의 된 환경 변수는이 제한을 겪지 않습니다.
버전 2.25 기준으로 NSSM은 다음과 유사한 명령을 사용하여 환경 블록을 얻고 설정할 수 있습니다.
nssm get <servicename> Environment
NSSM 서비스뿐만 아니라 모든 Windows 서비스에서 환경 블록을 사용할 수 있다는 점은 반복 할 가치가 있습니다.
환경 NSSM이 애플리케이션으로 전달되는 환경은 다양한 레지스트리 값이 구성되는 방식에 따라 다릅니다. 다음 흐름은 환경 수정 방법을 설명합니다.
기본적으로 : 서비스는 시스템 환경을 상속합니다.
환경이 정의 된 경우 : 환경의 내용은 환경에 병합됩니다.
매개 변수 appenvironment가 정의 된 경우 : 서비스는 Appenvironment에 지정된 환경을 상속합니다.
parameters appenvironmentextra가 정의 된 경우 : Appenvironmentextra의 내용은 환경에 추가됩니다.
Appenvironment는 시스템 환경과 병합 된 환경 블록을 무시합니다. 또한 Appenvironmentextra는 정의 된 경우 시작 환경에 추가됩니다.
NSSM은 응용 프로그램 이벤트에 대한 응답으로 사용자 구성 가능한 명령을 실행할 수 있습니다. 이 명령은 아래의 "후크"라고합니다.
모든 후크는 선택 사항입니다. 실행되는 모든 후크는 서비스를 위해 구성된 환경으로 시작됩니다. NSSM은 추가 변수를 환경에 배치하여 고리가 쿼리하여 어떻게, 왜 호출되었는지 알아볼 수 있습니다.
후크는 이벤트와 행동으로 분류됩니다. 일부 후크는 동기식으로 실행되며 일부는 비동기식으로 실행됩니다. *별표로 접두사가있는 후크는 동기식으로 실행됩니다. NSSM은 작업을 계속하기 전에 이러한 후크가 완료되기를 기다릴 것입니다. 그러나 모든 후크는 비동기식으로 실행되는지 여부에 관계없이 모든 후크가 마감일이 발생합니다.
이벤트 : 시작 - 서비스가 시작되도록 요청되면 트리거됩니다. *조치 : 사전 - NSSM이 애플리케이션을 시작하기 전에 호출됩니다. 조치 : 게시물 - 응용 프로그램이 성공적으로 시작된 후 호출됩니다.
이벤트 : 중지 - 서비스가 중지를 요청할 때 트리거되었습니다. *조치 : 사전 - NSSM이 신청서를 죽이려는 시도 전에 호출됩니다.
이벤트 : 종료 - 응용 프로그램이 종료 될 때 트리거되었습니다. *조치 : 포스트 - NSSM이 응용 프로그램을 정리 한 후 호출됩니다.
이벤트 : 회전 - 온라인 로그 회전이 요청되면 트리거됩니다. *조치 : 사전 - NSSM이 로그를 회전하기 전에 호출됩니다. 조치 : POST- NSSM이 로그를 회전 한 후 호출됩니다.
이벤트 : 전원 동작 : 변경 - 시스템 전원 상태가 변경되었을 때 호출됩니다. 조치 : 이력서 - 시스템이 대기에서 재개되었을 때 호출됩니다.
정지/포스트 후크가 없습니다. 서비스 종료 요청에 대한 응답에 관계없이 응용 프로그램이 종료 될 때 EXIT/POST가 호출되기 때문입니다. 정지/사전은 우아한 종료 시도 전에만 호출됩니다.
NSSM은 환경 변수 nssm_hook_version을 양수로 설정합니다. 후크는 숫자 값을 확인하여 다른 환경 변수를 결정할 수 있습니다.
NSSM_HOOK_VERSION이 1 이상인 경우 이러한 변수가 제공됩니다.
NSSM_EXE- NSSM 자체로가는 경로. NSSM_CONFIGURATION- NSSM 실행 파일 (예 : 64 비트 디버그)을위한 정보 구축. NSSM_VERSION- NSSM 실행 파일의 버전. NSSM_BUILD_DATE- NSSM의 빌드 날짜. NSSM_PID- 실행중인 NSSM 실행 파일의 프로세스 ID. NSSM_DEADLINE- 마감일 수의 밀리 초 후 NSSM은 여전히 실행중인 후크를 죽입니다. NSSM_SERVICE_NAME- NSSM에 의해 제어되는 서비스 이름. NSSM_SERVICE_DISPLAYNAME- 서비스의 표시 이름. NSSM_COMMAND_LINE- 애플리케이션을 시작하는 데 사용되는 명령 줄입니다. NSSM_APPLICATION_PID- 기본 응용 프로그램 프로세스의 프로세스 ID. 프로세스가 실행되지 않으면 비어있을 수 있습니다. NSSM_EVENT- 후크 트리거 이벤트 클래스. NSSM_ACTION- 후크를 트리거하는 이벤트 작업. NSSM_TRIGGER- 서비스 제어 후크 트리거. 서비스 컨트롤 (예 : Exit/Post)에 의해 후크가 트리거되지 않은 경우 비워 질 수 있습니다. NSSM_LAST_CONTROL- NSSM에서 처리하는 마지막 서비스 컨트롤. NSSM_START_REQUESTED_COUNT- 응용 프로그램이 시작하도록 요청한 횟수입니다. NSSM_START_COUNT- 응용 프로그램이 성공적으로 시작된 횟수입니다. NSSM_THROTTLE_COUNT- 응용 프로그램이 스로틀 기간보다 적은 시간 동안 실행 한 횟수입니다. 성공적인 시작 또는 서비스가 명시 적으로 edi 지시기에 0으로 재설정하십시오. NSSM_EXIT_COUNT- 응용 프로그램이 종료 된 횟수입니다. NSSM_EXITCODE- 응용 프로그램의 종료 코드. 응용 프로그램이 아직 실행 중이거나 아직 시작되지 않은 경우 비어있을 수 있습니다. NSSM_RUNTIME- NSSM 실행 파일이 실행중인 밀리 초. NSSM_APPLICATION_RUNTIME- 애플리케이션이 마지막으로 시작된 이래로 실행중인 밀리 초 수. 응용 프로그램이 아직 시작되지 않은 경우 비어있을 수 있습니다.
향후 NSSM 버전은 더 많은 환경 변수를 제공 할 수 있으며,이 경우 NSSM_Hook_Version은 더 높은 숫자로 설정됩니다.
후크는 후크 작업의 이름을 따서 명명 된 레지스트리에서 문자열 (reg_expand_sz) 값을 작성하여 구성됩니다. HKLM System CurrentControlset Services <ervice> appevents Appevents <event> 아래에 배치됩니다.
예를 들어, Appevents Power Resume을 설정하여 시스템이 대기에서 재개 될 때 서비스를 다시 시작하도록 구성 할 수 있습니다.
%NSSM_EXE% restart %NSSM_SERVICE_NAME%
명령 줄에 후크를 설정하려면 사용하십시오
nssm set <servicename> AppEvents <event>/<action> <command>
START/PRE 후크가 EXIT CODE 99를 반환하면 NSSM이 응용 프로그램의 시작을 중단합니다.
서비스는 일반적으로 다음 순서로 후크를 실행합니다.
시작/사전 시작/사후 중지/사전 출구/게시물
응용 프로그램이 충돌하여 NSSM에 의해 다시 시작되면 순서는 다음과 같습니다.
시작/사전 시작/사후 종료/사후 시작/사전 시작/사후 중지/사전 출구/게시물
NSSM이 stdout 또는 stderr를 리디렉션하는 경우 실행되는 후크의 출력을 리디렉션하도록 구성 할 수 있습니다. 해당 기능을 가능하게하려면 승인을 1로 설정하십시오. 물론 후크는 NSSM과 독립적으로 자체 I/O를 리디렉션 할 수 있습니다.
NSSM은 기존 서비스 설정을 설치하는 데 사용되는 동일한 GUI로 편집 할 수 있습니다. 달리다
nssm edit <servicename>
GUI를 키우기 위해.
NSSM은 NSSM 자체를 실행하는 서비스 이외의 서비스에 대한 제한된 편집 기능을 제공합니다. NSSM에 위에서 설명한 앱* 레지스트리 설정이없는 서비스를 편집하도록 요청하면 GUI는 서비스 표시 이름 및 설명과 같은 시스템 설정 만 편집 할 수 있습니다.
NSSM은 명령 줄에서 개별 서비스 매개 변수를 검색하거나 설정할 수 있습니다. 일반적으로 구문은 다음과 같습니다. 그러나 예외는 아래를 참조하십시오.
nssm get <servicename> <parameter>
nssm set <servicename> <parameter> <value>
매개 변수를 기본값으로 재설정 할 수도 있습니다.
nssm reset <servicename> <parameter>
NSSM으로 인식 된 매개 변수 이름은 위에서 설명한 레지스트리 항목 이름 (예 : AppDirectory)과 동일합니다.
NSSM은 NSSM 자체를 실행하는 서비스 이외의 서비스에 대한 제한된 편집 기능을 제공합니다. 인식 된 매개 변수는 다음과 같습니다.
설명 : 서비스 설명. DisplayName : 서비스 표시 이름. 환경 : 서비스 병합 환경. ImagePath : 서비스 실행 파일로가는 경로. ObjectName : 서비스를 실행하는 사용자 계정. 이름 : 서비스 키 이름. 시작 : 서비스 시작 유형. 유형 : 서비스 유형.
이는 서비스의 주요 HKLM System CurrentControlset Services <service>의 레지스트리 값에 해당합니다.
NSSM은 명령 줄에 전달 된 모든 인수를 공백으로 공백으로 연결하여 설정할 값을 형성합니다. 따라서 다음 두 개의 호출은 동일한 효과를 갖습니다.
nssm set <servicename> Description "NSSM managed service"
nssm set <servicename> Description NSSM managed service
Appenvironment, Appenvironmentextra 및 환경 매개 변수는 환경을 쿼리 할 때 추가 인수를 인식합니다. 다음 구문은 서비스에 대해 구성된 모든 추가 환경 변수를 인쇄합니다.
nssm get <servicename> AppEnvironmentExtra
반면 아래의 구문은 환경 블록에서 구성된 경우 클래스 경로 변수의 값만 인쇄하거나 구성되지 않은 경우 빈 문자열 만 인쇄합니다.
nssm get <servicename> AppEnvironmentExtra CLASSPATH
환경 블록을 설정할 때 각 변수는 별도의 명령 줄 인수에서 키 = 값 쌍으로 지정되어야합니다. 예를 들어:
nssm set <servicename> AppEnvironment CLASSPATH=C:Classes TEMP=C:Temp
또는 키는 블록에서 쌍을 추가하거나 제거하기 위해 각각 + 또는 - 기호로 접두사를 할 수 있습니다.
다음 두 줄은 ClassPath와 Temp를 설정합니다.
nssm set <servicename> AppEnvironment CLASSPATH=C:Classes
nssm set <servicename> AppEnvironment +TEMP=C:Temp
키가 이미 존재하는 경우 +키를 지정하면 키의 순서를 보존하면서 값을 대체합니다.
nssm set <servicename> AppEnvironment +CLASSPATH=C:NewClasses
다음 구문은 다른 변수를 제자리에 두는 동안 블록에서 단일 변수를 제거합니다.
nssm set <servicename> AppEnvironment -TEMP
-key = value를 지정하면 기존 값이 일치하는 경우에만 변수가 제거됩니다.
다음 구문은 Temp = c : temp를 제거하지 않습니다
nssm set <servicename> AppEnvironment -TEMP=C:WorkTemporary
+ 및 - 기호는 환경 변수에서 유효한 문자입니다. 구문 : key = value는 key = value와 동일하며 +/-로 시작하는 변수를 설정하거나 스크립트에서 블록을 명시 적으로 재설정하는 데 사용할 수 있습니다.
nssm set <servicename> AppEnvironment :CLASSPATH=C:Classes
nssm set <servicename> AppEnvironment +TEMP=C:Temp
AppExit 매개 변수에는 출구 코드를 지정하거나 설정할 추가 인수가 필요합니다. 기본 조치는 문자열 기본값으로 지정할 수 있습니다.
예를 들어, 서비스에 대한 기본 종료 조치를 얻으려면 실행해야합니다.
nssm get <servicename> AppExit Default
응용 프로그램이 Exit Code 2로 종료 할 때 종료 조치를 얻으려면
nssm get <servicename> AppExit 2
지정된 종료 코드에 대해 명시 적 조치가 구성되지 않으면 NSSM은 기본 종료 조치를 인쇄합니다.
응용 프로그램이 종료 코드 2로 종료 될 때 서비스를 중지하도록 서비스를 설정하려면 실행하십시오.
nssm set <servicename> AppExit 2 Exit
AppRiority 매개 변수는 관리 된 응용 프로그램의 우선 순위 클래스를 설정하는 데 사용됩니다. 유효한 우선 순위는 다음과 같습니다.
realtime_priority_class high_priority_class thever_normal_priority_class 정상_priority_class 아래 _normal_priority_class idle_priority_class
종종 그룹 및 종속 보존 매개 변수는 서비스의 종속성을 쿼리하거나 설정하는 데 사용됩니다. 종속성을 설정할 때 각 서비스 또는 서비스 그룹 ( + 기호에 앞서)은 별도의 명령 줄 인수에 지정되어야합니다. 예를 들어:
nssm set <servicename> DependOnService RpcSs LanmanWorkstation
또는 종속성 이름은 각각 종속성을 추가하거나 제거하기 위해 A + OR- 기호로 접두사를 할 수 있습니다.
다음 두 줄은 RPCS 및 Lanmanworkstation에 대한 종속성을 설정합니다.
nssm set <servicename> DependOnService RpcSs
nssm set <servicename> DependOnService +LanmanWorkstation
Follwing 구문은 RPCS에 대한 의존성을 제거합니다.
nssm set <servicename> DependOnService -RpcSs
서비스 그룹은 엄밀히 말해서 + 기호로 접두사를해야합니다. 그룹에 대한 단일 종속성을 지정하기 위해 + 기호는 다음과 같이 접두사를 할 수 있습니다.
다음 줄은 동일하며 각자는 NetBiosGroup에서만 종속성을 설정합니다.
nssm set <servicename> DependOnGroup NetBIOSGroup
nssm set <servicename> DependOnGroup :NetBIOSGroup
nssm set <servicename> DependOnGroup :+NetBIOSGroup
이 라인은 기존 의존성에 추가됩니다.
nssm set <servicename> DependOnGroup +NetBIOSGroup
nssm set <servicename> DependOnGroup ++NetBIOSGroup
이름 매개 변수는 설정되지 않고 쿼리 할 수 있습니다. 서비스의 레지스트리 키 이름을 반환합니다. 이는 구문이 호출하는 곳에서 서비스 표시 이름을 대체 할 수 있다는 사실을 활용하는지 아는 데 유용 할 수 있습니다.
ObjectName 매개 변수에는 사용자 이름을 설정할 때만 추가 인수가 필요합니다. 추가 인수는 사용자의 비밀번호입니다.
사용자 이름을 검색하려면 실행하십시오
nssm get <servicename> ObjectName
사용자 이름과 비밀번호를 설정하려면 실행하십시오
nssm set <servicename> ObjectName <username> <password>
논쟁의 규칙은 여전히 적용됩니다. 다음 호출은 유효하며 예상 효과가 있습니다.
nssm set <servicename> ObjectName <username> correct horse battery staple
잘 알려진 사용자 이름에는 비밀번호가 필요하지 않습니다. 비밀번호 매개 변수를 사용할 때는 생략 할 수 있습니다.
"localsystem"일명 "시스템"일명 "NT Authority System" "LocalService"일명 "로컬 서비스"일시인 일 차트 "NT Authority Local Service" "NetworkService"AKA "Network Service"NT Authority Network Service "NT Service Service 계정"NT Service <ServiceName> "
시작 매개 변수는 서비스의 시작 유형을 쿼리하거나 설정하는 데 사용됩니다. 유효한 서비스 시작 유형은 다음과 같습니다.
Service_auto_start : 부팅시 자동 시작. Service_delayed_start : 부팅시 지연된 시작. Service_Demand_Start : 수동 서비스 시작. Service_Disabled : 서비스가 비활성화되었습니다.
Service_delayed_Start는 Vista 이전의 Windows 버전에서 지원되지 않습니다. 지연된 시작을 사용할 수없는 경우 NSSM은 서비스를 자동 시작으로 설정합니다.
유형 매개 변수는 서비스 유형을 쿼리하거나 설정하는 데 사용됩니다. NSSM은 현재 문서화 된 모든 서비스 유형을 인식하지만 두 가지 유형 중 하나만 설정할 수 있습니다.
service_win32_own_process : 독립형 서비스. 이것은 기본값입니다. service_interactive_process : 데스크탑과 상호 작용할 수있는 서비스.
서비스는 LocalSystem 계정에 따라 실행되는 경우에만 대화식으로 구성 될 수 있습니다. 대화식 서비스를 구성하는 안전한 방법은 다음과 같이 두 단계입니다.
nssm reset <servicename> ObjectName
nssm set <servicename> Type SERVICE_INTERACTIVE_PROCESS
NSSM은 초보 서비스 제어 기능을 제공합니다.
nssm start <servicename>
nssm restart <servicename>
nssm stop <servicename>
nssm status <servicename>
nssm statuscode <servicename>
"NSSM 상태"및 "NSSM 상태 코드"의 출력은 서비스 상태를 나타내는 문자열 (예 : Service_Running)입니다.
상태가 성공적으로 검색된 경우 "NSSM 상태"의 종료 코드는 0이됩니다. 종료 코드가 0이 아닌 경우 오류가 발생했습니다.
"NSSM StatusCode"의 종료 코드는 서비스 상태의 숫자 값, 예를 들어 Service_Running의 경우 4입니다. 0은 유효한 서비스 상태 코드가 아닙니다. 종료 코드가 0 인 경우 오류가 발생했습니다.
NSSM은 서비스를 제거 할 수도 있습니다. 달리다
nssm remove <servicename>
서비스를 제거합니다. 서비스가 제거되기 전에 확인하라는 메시지가 표시됩니다. 필수 시스템 서비스를 제거하지 마십시오 ...
GUI의 확인없이 서비스를 제거하려면
nssm remove <servicename> confirm
필수 시스템 서비스를 제거하지 마십시오 ...
NSSM 로그는 Windows 이벤트 로그에 로그를냅니다. 이벤트 로그 소스로 등록되며 로그가 통과하는 각 유형의 메시지에 대해 고유 한 이벤트 ID를 사용합니다. 새 버전은 이벤트 유형을 추가 할 수 있지만 기존 이벤트 ID는 변경되지 않습니다.
NSSM이 등록하는 방식으로 인해 이벤트 뷰어가 열려 있고 다른 위치에서 여러 NSSM 인스턴스를 실행하는 경우 NSSM 바이너리를 교체하지 못할 수도 있음을 알고 있어야합니다.
다음 명령은 NSSM에서 관리하는 모든 서비스의 이름을 인쇄합니다.
nssm list
NSSM뿐만 아니라 시스템의 모든 서비스를 보려면 모든 것을 사용하십시오.
nssm list all
다음 명령은 주어진 서비스에서 시작한 프로세스 ID 및 실행 가능한 프로세스 경로를 인쇄합니다.
nssm processes <servicename>
32 비트 NSSM이 Vista보다 이전 버전의 Windows를 실행하는 64 비트 시스템에서 실행되면 64 비트 프로세스의 경로를 쿼리 할 수 없습니다.
NSSM은 서비스 구성을 재현하는 명령을 덤프 할 수 있습니다. 출력을 배치 스크립트로 붙여서 서비스를 백업하거나 다른 컴퓨터로 전송할 수 있습니다.
nssm dump <servicename>
서비스 구성에는 명령 프롬프트에서 인용하거나 탈출 해야하는 문자가 포함될 수 있으므로 NSSM은 스크립트로 실행될 때 올바르게 작동하는 출력을 생성하려고 노력하고, 따옴표와 간병이 적절하게 이스케이프를 추가하여 출력을 생성하려고합니다.
서비스 복사를 용이하게하기 위해 덤프 명령은 출력에 사용할 서비스 이름을 지정하는 두 번째 인수를 받아들입니다.
nssm dump <servicename> <newname>
덤프의 선은 구성을 표시하면서 서비스를 참조합니다.
Unreal Tournament Server를 설치하려면 :
nssm install UT2004 c:gamesut2004systemucc.exe server
서버를 "게임"사용자로 실행하려면 :
nssm set UT2004 ObjectName games password
To configure the server to log to a file:
nssm set UT2004 AppStdout c:gamesut2004service.log
To restrict the server to a single CPU:
nssm set UT2004 AppAffinity 0
To remove the server:
nssm remove UT2004 confirm
To find out the service name of a service with a display name:
nssm get "Background Intelligent Transfer Service" Name
NSSM is known to compile with Visual Studio 2008 and later. Older Visual Studio releases may or may not work if you install an appropriate SDK and edit the nssm.vcproj and nssm.sln files to set a lower version number. They are known not to work with default settings.
NSSM will also compile with Visual Studio 2010 but the resulting executable will not run on versions of Windows older than XP SP2. If you require compatiblity with older Windows releases you should change the Platform Toolset to v90 in the General section of the project's Configuration Properties.
Thanks to Bernard Loh for finding a bug with service recovery. Thanks to Benjamin Mayrargue (www.softlion.com) for adding 64-bit support. Thanks to Joel Reingold for spotting a command line truncation bug. Thanks to Arve Knudsen for spotting that child processes of the monitored application could be left running on service shutdown, and that a missing registry value for AppDirectory confused NSSM. Thanks to Peter Wagemans and Laszlo Keresztfalvi for suggesting throttling restarts. Thanks to Eugene Lifshitz for finding an edge case in CreateProcess() and for advising how to build messages.mc correctly in paths containing spaces. Thanks to Rob Sharp for pointing out that NSSM did not respect the AppEnvironment registry value used by srvany. Thanks to Szymon Nowak for help with Windows 2000 compatibility. Thanks to François-Régis Tardy and Gildas le Nadan for French translation. Thanks to Emilio Frini for spotting that French was inadvertently set as the default language when the user's display language was not translated. Thanks to Riccardo Gusmeroli and Marco Certelli for Italian translation. Thanks to Eric Cheldelin for the inspiration to generate a Control-C event on shutdown. Thanks to Brian Baxter for suggesting how to escape quotes from the command prompt. Thanks to Russ Holmann for suggesting that the shutdown timeout be configurable. Thanks to Paul Spause for spotting a bug with default registry entries. Thanks to BUGHUNTER for spotting more GUI bugs. Thanks to Doug Watson for suggesting file rotation. Thanks to Арслан Сайдуганов for suggesting setting process priority. Thanks to Robert Middleton for suggestion and draft implementation of process affinity support. Thanks to Andrew RedzMax for suggesting an unconditional restart delay. Thanks to Bryan Senseman for noticing that applications with redirected stdout and/or stderr which attempt to read from stdin would fail. Thanks to Czenda Czendov for help with Visual Studio 2013 and Server 2012R2. Thanks to Alessandro Gherardi for reporting and draft fix of the bug whereby the second restart of the application would have a corrupted environment. Thanks to Hadrien Kohl for suggesting to disable the console window's menu. Thanks to Allen Vailliencourt for noticing bugs with configuring the service to run under a local user account. Thanks to Sam Townsend for noticing a regression with TerminateProcess(). Thanks to Barrett Lewis for suggesting the option to skip terminating the application's child processes. Thanks to Miguel Angel Terrón for suggesting copy/truncate rotation. Thanks to Yuriy Lesiuk for suggesting setting the environment before querying the registry for parameters. Thanks to Gerald Haider for noticing that installing a service with NSSM in a path containing spaces was technically a security vulnerability. Thanks to Scott Ware for reporting a crash saving the environment on XP 32-bit. Thanks to Stefan and Michael Scherer for reporting a bug writing the event messages source. Thanks to Paul Baxter for help with Visual Studio 2015. Thanks to Mathias Breiner for help with Visual Studio and some registry fixes. Thanks to David Bremner for general tidyups. Thanks to Nabil Redmann for suggesting redirecting hooks' output. Thanks to Bader Aldurai for suggesting the process tree. Thanks to Christian Long for suggesting virtual accounts. Thanks to Marcin Lewandowski for spotting a bug appending to large files. Thanks to Nicolas Ducrocq for suggesting timestamping redirected output. Thanks to Meang Akira Tanaka for suggestion and initial implementation of the statuscode command. Thanks to Kirill Kovalenko for reporting a crash with NANO server. Thanks to Connor Reynolds for spotting a potential buffer overflow. Thanks to foi for spotting a hang with 64 cores.
NSSM is public domain. You may unconditionally use it and/or its source code for any purpose you wish.