자 료 실

유틸리티 응용프로그램 서비스 등록 추가 및 삭제 cmd, bat 및 포터블화 활용

2021.07.12 23:30

슈머슈마 조회:1408 추천:2

 

 

NSSM - 응용 프로그램 서비스 관리자 추가 및 삭제

용법

nssm의 "설치" 가 필요하지 않습니다. 시스템의 어딘가(가급적 PATH의 어딘가)에 배치하고 실행하십시오.

그러나 nssm 은 자신을 이벤트 로그 메시지 소스로 등록합니다. 즉, 여러 인스턴스를 실행하거나 다른 위치에서 다른 버전의 nssm 을 실행 하면 혼동을 일으킬 수 있습니다. 또한 이벤트 뷰어를 실행하면 nssm 실행 파일 이 열리므로 덮어쓸 수 없습니다. nssm 을 업그레이드하려면 이 점을 염두에 두십시오 .

일부 기능은 특정 버전에서 지원되는 것으로 레이블이 지정됩니다. 설명된 버전이 다운로드 페이지 에서 사용할 수 있는 것보다 최신 버전인 경우 기능이 활성화된 시험판 빌드 가 있을 수 있습니다 .

아래의 해당 명령 예 는 스크린샷과 일치 하도록 기존 서비스를 구성하는 명령 을 보여줍니다 많은 경우 해당 매개변수의 기본값을 나타내므로 중복됩니다. 모든 매개변수는 다음을 사용하여 기본값으로 재설정할 수도 있습니다.


 

서비스 설치

nssm 을 사용하여 서비스를 설치할 수 있습니다 입력 명령은 다음과 같습니다.


 

설치 프로그램은 구성 가능한 매개변수가 많은 여러 탭으로 구성됩니다. 대부분 nssm 의 기본값 으로 사전 설정되어 있으므로 애플리케이션 탭 을 벗어나지 않고도 서비스를 설치할 수 있습니다 .

애플리케이션 탭

실행하려는 응용 프로그램(또는 스크립트) 의 경로 이며 유일한 필수 필드입니다. 응용 프로그램이 특정 디렉터리에서 시작 해야 하는 경우 시작 디렉터리 필드 에 입력할 수 있습니다 필드를 비워 두면 기본 시작 디렉터리가 응용 프로그램이 포함된 디렉터리가 됩니다. 인수 필드는 응용 프로그램에 전달하는 모든 명령 줄 인수를 지정할 수 있습니다.

아래 스크린샷은 UT2003 서버 설치를 보여줍니다 이러한 서비스를 실행하는 명령은 UCC 서버 의 전체 경로 있도록 UCC.exe가 아래에 입력 경로 및 서버 에서 입력 옵션 .

install_application.png

동등한 명령 :


 

 

 

서비스 설치를 클릭하면 서비스 설치가 완료됩니다.

세부정보 탭

세부 사항 탭에는 시스템은 서비스에 대해 자세히 설명합니다.

install_details.png

동등한 명령 :


 

 

 

로그온 탭

에 로그인 탭은 서비스를 실행할 사용자 계정을 관리 할 수 있습니다. nssm 은 선택한 계정 에 서비스로 필요한 로그온 권한 이 있는지 자동으로 확인합니다 .

install_logon.png

동등한 명령 :


 

 

명령줄 에서 계정 및 암호를 구성하는 방법에 대한 자세한 내용 은 명령줄 사용 설명서를 참조하십시오. 빈 암호를 구성 해야 하는 경우 명령줄을 사용해야 합니다.

종속성

종속성 탭에는 실행할 수있는 서비스 전에 시작해야하는 서비스 또는 서비스 그룹을.

서비스 이름 또는 표시 이름을 한 줄에 하나씩 입력할 수 있습니다. 서비스 그룹 이름 앞에는 SC_GROUP_IDENTIFIER 접두사(+ 기호)가 와야 합니다.

install_dependencies.png

동등한 명령 :


 

프로세스 탭

프로세스 탭을 설정하는 데 사용할 수있는 프로세스 응용 프로그램에 대한 우선 순위 및 CPU 선호도를. 기본적으로 응용 프로그램은 일반 우선 순위로 실행되며 모든 CPU에서 실행할 수 있습니다. 사용 가능한 CPU의 하위 집합으로 프로세스를 제한하려면 "모든 프로세서"를 선택 취소하고 원하는 대로 CPU를 선택합니다.

서비스가 실행되는 동안 Windows 작업 관리자에서 프로세스 우선 순위 및 선호도를 변경할 수 있습니다.

install_process.png

동등한 명령 :


 

 

 

종료 탭

종료 탭에는 다양한 정지 방법 및 대기 시간은 충돌하거나 서비스가 정상적으로 중지 된 후 응용 프로그램을 정리 할 때 사용.

install_shutdown.png

동등한 명령 :


 

 

 

 

종료 작업 탭

종료 액션 탭은 조정할 수 있습니다 재시작 조절 및 기본 종료 조치를 서비스합니다. 응용 프로그램의 자동 다시 시작 사이에 필수 지연을 지정할 수도 있습니다 .

특정 응용 프로그램 종료 코드에 대한 종료 작업을 구성하려면 아래에 설명된 대로 레지스트리를 사용해야 합니다 .

install_exitactions.png

동등한 명령 :


 

 

 

입출력 탭

I / O의 탭이 때 사용되는 입력 및 / 또는 출력 파일을 지정하는 데 사용할 수 있습니다 I / O를 재 활성화됩니다. 출력 및 오류 설정 은 일반적으로 애플리케이션에서 생성된 로그 메시지를 캡처하기에 충분합니다.

경로 및 액세스 모드에 대한 추가 제어를 위해 아래 에 설명된 대로 레지스트리에서 I/O를 구성하십시오 .

install_io.png

동등한 명령 :


 

 

파일 회전 탭

파일 회전 탭과 함께 사용할 수있는 I / O 설정을 구성 회전 출력 파일 때 서비스 재시작.

는 IF 교체 기존의 출력 및 / 또는 오류 파일 확인란이 선택되어, nssm는 서비스를 시작할 때 출력 파일을 기존 덮어 쓰게됩니다. 기본값은 기존 파일에 추가하는 것입니다. 경우 회전이 파일 확인란이 선택되어, nssm은 이전에 설정 I / O 재 지정에 기존 파일을 이름을 변경합니다. 사용 회전 제한 의 지정된 수보다 최근에 수정 된 파일을 해제 파일 회전 필드  또는 지정된 수보다 작다 킬로바이트 .

기본적으로 nssm 은 서비스가 (재)시작될 때만 파일 회전을 수행합니다. 서비스가 실행되는 동안 지정된 크기 제한까지 커지는 파일의 회전을 활성화하려면 서비스가 실행되는 동안 회전 확인란을 선택합니다. 온라인 교체는 구성된 파일 보존 기간을 무시합니다.

위험, 움직이는 부품! 온라인 회전을 사용하려면 nssm 이 애플리케이션의 출력을 가로채고 파일 자체를 작성해야 합니다. 복잡성 증가는 필연적으로 실패 위험 증가로 이어집니다.

install_rotation.png

동등한 명령 :


 

 

 

 

 

 

환경 탭

환경 탭의 개행 구분 된 목록을 지정하는 데 사용할 수있는 환경 변수를 프로그램에 전달할. 는 IF 교체 기본 환경 확인란이 될 것입니다 지정된 변수를 체크 에만 서비스에 전달 것들. 체크하지 않으면(기본값) 서비스 시작 시 생성된 환경이 유지됩니다.

install_environment.png

동등한 명령 :


 

명령줄에서 설치

버전 2.0부터는 GUI를 우회하고 명령줄에서 서비스를 설치할 수도 있습니다. 구문은 다음과 같습니다.


 

서비스 데이터베이스에 입력되는 실제 프로그램은 nssm 자체이므로 서비스 설치 후 nssm.exe를 이동하거나 삭제 하면 안 됩니다. nssm.exe 의 경로를 변경하려면 서비스를 제거하고 다시 설치하거나 HKLM\System\CurrentControlSet\Services\ servicename \ImagePath 를 편집 하여 새 위치를 반영할 수 있습니다.

인용 문제

nssm 은 공백이 있는 경로를 올바르게 처리하지만 명령 프롬프트가 작동하는 방식 때문에 인수를 전달하는 것이 까다로울 수 있습니다.

응용 프로그램 경로에 공백이 포함된 경우 따옴표로 묶어야 합니다. 그렇지 않으면 명령 프롬프트에서 경로를 두 개의 인수 로 해석합니다 .


 

당신이 제공하고자하는 옵션 중 하나에 공백이 포함되어있는 경우, 당신은 너무 그것을 인용해야합니다  따옴표 자체를 인용.


 

Isaballa Sanfelipo는 배치 파일에서 Java 응용 프로그램을 설치하는 방법을 제안합니다.


 

John Duffy는 따옴표를 매개변수 목록에 전달해야 했습니다.


 

서비스 제거

서비스를 제거하는 명령은 다음과 같습니다.


 

remove.png

서비스가 제거되기 전에 확인 창이 표시됩니다.

confirmremove.png

버전 2.0부터는 명령줄에서 서비스를 제거할 수도 있습니다.


 

nssm 은 nssm 자체가 관리 하는 서비스뿐만 아니라 모든 서비스를 기꺼이 제거하려고 합니다. 삭제하지 말아야 할 서비스를 삭제하지 마세요...

서비스 종료

때 nssm는 Windows 서비스 관리자에서 중지 명령을 수신하거나 모니터링 응용 프로그램이 종료 된 것을 감지하면 정상적으로, 모니터되는 응용 프로그램 및 모든 하위 프로세스를 종료하려고합니다. 애플리케이션의 프로세스 트리가 즉시 종료되지 않으면 nssm 은 애플리케이션에 속한 모든 프로세스와 하위 프로세스를 강제로 종료할 수 있습니다.

nssm 은 애플리케이션을 종료 하는  사용할 수 있는 4단계가 있으며 기본적 으로 4단계를 모두 순서대로 시도합니다. 권장되지는 않지만 일부 또는 모든 방법이 사용되지 않도록 하는 것이 가능합니다. 다른 응용 프로그램은 다양한 요청에 다르게 응답하므로 일반적으로 응용 프로그램을 정상적으로 종료하는 가장 좋은 방법은 모두 활성화된 상태로 두는 것입니다.

먼저 nssm 은 Control-C 이벤트를 생성하여 애플리케이션의 콘솔로 보내려고 시도합니다. 배치 스크립트 또는 콘솔 응용 프로그램이 이벤트를 가로채서 정상적으로 종료될 수 있습니다. Java 응용 프로그램은 Control-C 이벤트에 잘 응답하는 경향이 있습니다. GUI 응용 프로그램에는 콘솔이 없으며 이 방법에 응답하지 않습니다. Windows 2000에서는 지원되지 않습니다.

두 번째로 nssm 은 응용 프로그램에서 만든 모든 창을 열거하고 WM_CLOSE 메시지를 보냅니다. 응용 프로그램은 정상적인 종료를 시작하여 메시지에 응답하는 규칙을 따를 수 있습니다.

세 번째로 nssm 은 애플리케이션에 의해 생성된 모든 스레드를 열거 하고 애플리케이션에 스레드 메시지 큐가 있는 경우 수신될 WM_QUIT 메시지를 보냅니다 .

최후의 수단으로 nssm 은 TerminateProcess()운영 체제에 애플리케이션을 강제 종료하도록 요청할 수 있습니다 TerminateProcess()전화 때문에 대부분의 상황에서 응용 프로그램이 살해되고, 갇혀되거나 무시 될 수 없다. 그러나 종료되기 전에 정리 작업을 수행할 가능성은 거의 없습니다.

위의 방법을 비활성화하려면 정수(REG_DWORD) 값 HKLM\System\CurrentControlSet\Services\ servicename \Parameters\AppStopMethodSkip을 만들고 아래 숫자 중 하나 이상의 합계로 설정합니다.

  • 1 - Control-C를 콘솔로 보내지 마십시오.

  • 2 - WM_CLOSE를 Windows로 보내지 마십시오.

  • 4 - 스레드에 WM_QUIT를 보내지 마십시오.

  • 8 - TerminateProcess()를 호출하지 마십시오.

예를 들어 응용 프로그램이 Control-C에 응답하지 않고 스레드 메시지 대기열이 없다는 것을 알고 있다면 AppStopMethodSkip 을 5로 설정할 수 있습니다.

통화 를 비활성화 하지 않는 것이 좋습니다 TerminateProcess()서비스가 중지 되면 nssm 이 종료됩니다. 그 전에 응용 프로그램이 종료되지 않으면 계속 실행될 수 있으며 nssm 은 더 이상 응용 프로그램 을 제어할 수 없습니다.

기본적으로 nssm 은 위에서 설명한 각 방법을 시도한 후 응용 프로그램이 종료될 때까지 최대 1500밀리초 동안 기다립니다. 시간 제한은 레지스트리의 HKLM\System\CurrentControlSet\Services\ servicename \Parameters 아래에 정수(REG_DWORD) 값을 생성 하고 원하는 대기 시간(밀리초)으로 설정하여 메서드별로 구성할 수 있습니다 .

  • AppStopMethodConsole - Control-C를 보낸 후 대기하는 시간입니다.

  • AppStopMethodWindow - WM_CLOSE 전송 후 대기 시간입니다.

  • AppStopMethodThreads - WM_QUIT 전송 후 대기 시간입니다.

시간 제한은 응용 프로그램에 의해 생성된 모든 프로세스에 적용되므로 응용 프로그램에 여러 하위 프로세스가 있는 경우 총 시간 제한이 예상보다 길어질 수 있습니다.

종료 시 작업

애플리케이션이 종료될 때 nssm 이 수행해야 하는 작업을 구성하려면 HKLM\System\CurrentControlSet\Services\ servicename \Parameters\AppExit 키의 기본값을 편집하십시오 nssm이 실행될 때 레지스트리에 키가 없으면 키가 생성되고 값이 Restart 로 설정 됩니다. Ignore(무시) 또는 Exit(종료) 로 변경 하여 수행할 작업을 지정합니다. nssm 은 이 키가 아직 존재하지 않는 경우에만 생성합니다. 변경 사항은 무시되지 않습니다.

특정 종료 코드에 대해 다른 작업을 지정하려면 AppExit 키 아래에 이름이 고려 중인 종료 코드인 문자열(REG_SZ) 값을 작성하십시오 예를 들어 종료 코드 0(일반적으로 응용 프로그램이 성공적으로 완료되었음을 의미)에서 서비스를 중지하려면 HKLM\System\CurrentControlSet\Services\ servicename \Parameters\AppExit\0 을 만들고 Exit 로 설정 합니다 . 이벤트 로그에서 nssm의 메시지 를 확인하여 애플리케이션에서 반환된 종료 코드를 확인합니다.

애플리케이션의 종료 코드가 레지스트리 항목과 일치하지 않는 경우 nssm 은 수행할 작업을 결정할 때 AppExit 의 기본값을 사용합니다 .

재시작 지연

버전 2.22부터 nssm 은 애플리케이션 재시작 사이에 필수 지연을 적용할 수 있습니다. 예를 들어, 매시간 배치 스크립트와 같은 규칙적인 간격으로 명령을 실행하는 데 사용할 수 있습니다.

다시 시작 지연을 지정하려면 정수(REG_DWORD) 값 HKLM\System\CurrentControlSet\Services\ servicename \Parameters\AppRestartDelay를 만들고 다시 시작 사이에 대기할 시간(밀리초)으로 설정합니다.

서비스는 다음 다시 시작을 기다리는 동안 해당 상태를 일시 중지됨으로 보고합니다. 계속 컨트롤을 보내면 지연이 일시적으로 취소되고 즉시 다시 시작됩니다.

조절 및 재시작 지연이 모두 구성된 경우 nssm이 작동 하는 방식에 대한 참고 사항은 아래의 다시 조절 조절 섹션을 참조하십시오 .

조절 다시 시작

빡빡한 CPU 루프를 피하기 위해 nssm 은 모니터링되는 응용 프로그램이 시작된 후 너무 빨리 종료되는 경우 서비스 다시 시작을 제한합니다. 기본적으로 1500밀리초의 임계값이 사용됩니다. 다른 값을 지정하려면 정수(REG_DWORD) 값 HKLM\System\CurrentControlSet\Services\ servicename \Parameters\AppThrottle 을 만들고 필요한 밀리초 수로 설정합니다.

지연 없이 첫 번째 재시작이 시도됩니다. 다시 시작된 응용 프로그램이 임계값(밀리초) 동안 실행되기 전에 계속 종료되면 nssm 이 최소 2000밀리초 동안 일시 중지되어 각 후속 실패에 대한 일시 중지 시간이 두 배로 늘어납니다. 일시 중지되는 최대 시간은 약 4분인 256000밀리초입니다. 서비스가 최소한 임계 시간 동안 성공적으로 실행되면 지연 카운터가 재설정됩니다.

서비스가 실패한 이유를 확인하고 문제를 수정하기 위한 조치를 취하면 일시 중지됨으로 표시되는 서비스에 계속 제어를 보낼 수 있습니다. 이렇게 하면 다음 재시작 시도를 기다리지 않아도 됩니다.

때 재시작 지연은 애플리케이션 종료 중간에 구성되고, nssm이 중 다시 시작하여 스로틀 링 할  구성된 지연 시간 계산을 스로틀. 예를 들어 다시 시작 지연을 3000밀리초로 구성하고 시작할 때마다 서비스가 실패한 경우 구성된 3000ms가 조절에서 0ms보다 길기 때문에 첫 번째 다시 시작 시도가 3000밀리초 지연됩니다. 두 번째 시도도 3000밀리초 지연됩니다. 구성된 3000ms는 조절에서 다시 2000ms보다 깁니다. 세 번째 시도는 4000밀리초 지연됩니다. 구성된 3000ms보다 깁니다.

이러한 이유로 재시작 지연을 사용하여 5분 미만의 간격으로 반복되는 단기 서비스를 구성하려면 AppThrottle 값을 낮추는 것을 고려해야 합니다 .

프로세스 우선 순위 및 CPU 선호도

버전 2.22부터 nssm 은 관리되는 애플리케이션의 CPU 선호도 및 프로세스 우선 순위를 관리할 수 있습니다.

기본적으로 응용 프로그램은 일반 프로세스 우선 순위로 시작되며 모든 CPU에서 실행할 수 있습니다. nssm 은 HKLM\System\CurrentControlSet\Services\ servicename \Parameters 에서 레지스트리 항목을 찾아 애플리케이션 시작을 구성합니다.

정수(REG_DWORD) 값 AppPriority 가 설정되면 nssm 은 해당 값을 인수로 해석하고 SetPriorityClass()지정된 우선 순위로 애플리케이션을 시작합니다.

문자열(REG_SZ) 값 AppAffinity 가 설정되면 nssm 은 0 부터 애플리케이션을 실행할 수 있는 쉼표로 구분된 CPU ID 목록으로 해석합니다 또는 대시로 인덱스를 구분하여 ID 범위를 지정할 수 있습니다.

숫자, 대시 및 쉼표만 선호도 문자열에서 유효합니다.

예를 들어, 문자열 0-2,4 는 응용 프로그램이 시스템의 첫 번째, 두 번째, 세 번째 및 다섯 번째 CPU에서 실행될 수 있음을 지정합니다.

콘솔 창

버전 2.22부터 nssm 은 기본적으로 애플리케이션에 대한 새 콘솔 창을 생성합니다. 이렇게 하면 사용자 입력을 읽을 수 있을 것으로 예상되는 프로그램과 같이 그렇지 않으면 실패할 일부 프로그램이 작동할 수 있습니다. 콘솔 창은 HKLM\System\CurrentControlSet\Services\ servicename \Parameters 아래 의 정수(REG_DWORD) 값 AppNoConsole 을 0이 아닌 값 으로 설정하여 필요하지 않은 경우 비활성화할 수 있습니다 .

I/O 리디렉션

nssm 은 관리되는 애플리케이션의 I/O를 에서 열 수 있는 모든 경로로 리디렉션할 수 있습니다 CreateFile()이 기능은 애플리케이션이 콘솔에 로그인할 수 있을 것으로 예상하는 경우에 유용할 수 있습니다.

nssm 은 HKLM\System\CurrentControlSet\Services\ servicename \Parameters 에서 인수에 해당하는 키 를 찾습니다 CreateFile()모두 선택 사항입니다. 특정 스트림에 대한 경로가 제공되지 않으면 리디렉션되지 않습니다. 경로가 지정되었지만 다른 값이 있으면 적절한 기본값을 받습니다.

  • AppStdin (문자열) - 입력을 수신할 경로입니다.

  • AppStdinShareMode (정수) - ShareMode 입력에 대한 인수입니다.

  • AppStdinCreationDisposition (정수) - CreationDisposition 입력에 대한 인수입니다.

  • AppStdinFlagsAndAttributes (정수) - FlagsAndAttributes 입력에 대한 인수입니다.

  • AppStdout (문자열) - 출력을 수신할 경로입니다.

  • AppStdoutShareMode (정수) - ShareMode 출력에 대한 인수입니다.

  • AppStdoutCreationDisposition (정수) - CreationDisposition 출력에 대한 인수입니다.

  • AppStdoutFlagsAndAttributes (정수) - FlagsAndAttributes 출력에 대한 인수입니다.

  • AppStderr (문자열) - 오류 출력을 수신할 경로입니다.

  • AppStderrShareMode (정수) - ShareMode 오류 출력에 대한 인수입니다.

  • AppStderrCreationDisposition (정수) - CreationDisposition 오류 출력에 대한 인수입니다.

  • AppStderrFlagsAndAttributes (정수) - FlagsAndAttributes 오류 출력에 대한 인수입니다.

일반적 으로 응용 프로그램이 정보 및 오류 메시지를 별도로 기록할 수 있으므로 출력을 기록하려면 AppStdout 과 AppStderr 을 모두 설정하는 것이 좋습니다 .

stderr 및 stdout을 모두 동일한 경로로 지정할 수 있지만 nssm 의 제한으로 인해 AppStdout 및 AppStderr 레지스트리 값 모두에 정확히 동일한 문자열을 제공해야 합니다. 두 항목이있는 경우에만 같은 의지 nssm 두 개의 스트림을 인터리브 할 수 있습니다.

파일 회전

버전 2.22부터 I/O 리디렉션 이 활성화된 경우 nssm 은 애플리케이션을 시작하기 전에 기존 출력 파일을 회전할 수 있습니다. nssm 은 서비스가 실행되는 동안 파일을 회전할 수도 있습니다. 아래 온라인 순환을 참조하십시오 .

회전을 활성화하려면 정수(REG_DWORD) 값 HKLM\System\CurrentControlSet\Services\ servicename \Parameters\AppRotate를 만들고 1로 설정합니다. 서비스를 (재)시작하기 전에 nssm 은 AppStdout에 구성된 파일을 회전 하고 /또는 이미 존재하는 경우 AppStderr .

기존 파일은 파일의 마지막 수정 시간을 사용하는 템플릿에 따라 이름이 바뀝니다. 예를 들어 C:\Services\myservice.log 는 C:\Services\myservice-20140114T180840.953.log 로 회전될 수 있습니다 .

타임스탬프는 ISO8601 형식이므로 이름순으로 정렬된 회전된 파일 목록은 가장 오래된 파일을 먼저 표시하고 밀리초 부분을 포함하므로 서비스가 종료되고 10분 이내에 다시 시작되더라도 파일이 손실되지 않습니다. 잠깐.

HKLM\System\CurrentControlSet\Services\ servicename \Parameters 아래에 있는 두 개의 추가 레지스트리 설정을 사용하여 nssm 이 파일을 회전 하는 방식을 조정할 수 있습니다 .

정수(REG_DWORD) 값 AppRotateSeconds 가 설정된 경우 nssm 은 구성된 시간(초) 미만 으로 마지막으로 수정된 파일을 회전하지 않습니다 .

정수(REG_DWORD) 값 AppRotateBytes 가 설정되면 nssm 은 구성된 바이트 수보다 작은 파일을 회전하지 않습니다 nssm는 당신이 로그 파일에 대한 그것의 벌금 크기가 4GB로 성장할 있지만 더 그냥 결정할 경우에도, 크기가 32 비트를 표현하기에 너무 큰 파일을 처리 할 수있는 너무 큰 . AppRotateBytesHigh 값은 64비트 크기의 상위 부분으로 해석됩니다.

두 경우 AppRotateSeconds 및 AppRotateBytes (높은)이 설정되어 nssm는 파일이 회전하는 두 조건을 충족해야합니다.

온라인 순환

정수(REG_DWORD) 값 AppRotateOnline 이 1로 설정되면 nssm 은 서비스가 실행되는 동안 구성된 파일 크기 제한까지 커지는 파일을 회전할 수 있습니다. AppRotateSeconds 의 값은 온라인 순환을 위해 무시되지만 서비스 (재)가 시작되기 전에 순환에 계속 적용됩니다.

AppRotateOnline는 경우 무시됩니다 AppRotate가 설정되어 있지 않습니다.

온라인 교체가 활성화되면 nssm 은 애플리케이션의 stdout 및/또는 stderr을 읽고 출력 파일 자체를 씁니다. 이렇게 하면 단순 I/O 리디렉션에 비해 복잡성이 발생하므로 이를 필요로 하지 않는 서비스에는 사용하지 않아야 합니다. nssm 은 I/O 오류를 정상적으로 처리하려고 시도 하지만 문제 가 발생하면 서비스가 다시 시작될 때까지 응용 프로그램의 출력이 손실될 수 있습니다. 참고 항목 기술적 인 토론 방법에 대한 자세한 내용을 nssm 핸들 I / O 리디렉션.

주문형 순환

nssm 은 구성된 크기 제한에 도달했는지 여부에 관계없이 필요에 따라 출력 파일을 회전할 수 있습니다. 서비스에 대한 파일 회전을 요청하려면 사용자 정의 서비스 제어 128을 보내거나 다음 명령을 실행하십시오 .


 

주문형 회전의 제한 사항은 응용 프로그램에서 다음 입력 행을 읽을 때까지 실제 파일 이름 바꾸기가 발생하지 않는다는 것입니다. 이러한 이유로 애플리케이션의 자세한 내용에 따라 순환 요청을 발행한 후 순환이 발생하는 사이에 상당한 지연이 있을 수 있습니다.

요청 시 회전은 AppRotateBytes 가 구성되지 않은 경우에도 작동 합니다. 즉, 서비스가 실행되는 동안 파일을 회전하지 않는 경우입니다. 그러나 AppRotate 와 AppRotateOnline 이 모두 구성되어 있지 않으면 작동하지 않습니다 .

I/O 리디렉션 기술 세부정보

서비스가 I/O를 처리하는 방법을 볼 때 고려해야 할 세 가지 경우가 있습니다.

리디렉션 없음

가장 간단한 경우 nssm 은 I/O 리디렉션으로 구성되지 않습니다. 콘솔 인스턴스에 연결된 stdin, stdout 및 stderr로 애플리케이션을 시작합니다. 서비스가 LOCALSYSTEM 계정으로 실행되고 데스크톱과 상호 작용하도록 구성된 경우 출력을 직접 볼 수 있습니다.

I/O가 리디렉션되었습니다. 온라인 순환 비활성화

stdout 및/또는 stderr이 리디렉션되고 온라인 회전이 비활성화된 경우 nssm 은 CreateFile()각 I/O 스트림에 대한 핸들을 열기 위해 호출한 다음 에 전달 DuplicateHandle()된 STARTUPINFO데이터 구조 의 핸들 사본을 설정하기 위해 호출 합니다 CreateProcess()따라서 응용 프로그램은 파일에 대한 열린 핸들로 실행되지만 nssm 자체에는 열린 핸들이 없습니다.

I/O가 리디렉션되었습니다. 온라인 순환 활성화

이 경우는 세 가지 중 단연코 가장 복잡하므로 무엇인가 잘못될 위험이 가장 높아 잠재적으로 애플리케이션의 출력이 손실될 수 있습니다.

nssmCreateFile() 은 이전 경우와 마찬가지로 먼저 호출합니다 그런 다음 CreatePipe()익명 파이프를 열도록 호출 합니다. 파이프의 읽기 끝과 출력 파일에 대한 핸들은 실제 쓰기를 수행하는 새 스레드로 전달됩니다. 파이프의 쓰기 끝은 DuplicateHandle()로 전달하기 위해 로 복제 됩니다 CreateProcess()따라서 애플리케이션은 파이프의 한쪽 끝에 열린 핸들로 실행 되고 nssm 은 파이프 의 다른 쪽 끝에 대한 핸들과 출력 파일에 대한 핸들로 실행됩니다.

쓰기 스레드는 파이프에서 데이터, 즉 응용 프로그램의 출력을 버퍼로 읽은 ReadFile() 다음 해당 버퍼의 내용을 로 출력 파일에 쓰는 간단한 루프를 실행합니다 WriteFile()파일이 구성된 크기 제한에 도달하면 스레드가 다음 줄 바꿈까지 기록하고 해당 출력 핸들을 닫고 파일을 회전한 다음 새 핸들을 열어 새 파일에 계속 기록합니다.

경우 nssm가 수신 주문형 회전은 다음 후에 회전을 수행하는 기록 스레드를 지시하는 플래그를 설정한다 요청 ReadFile()에 관계없이 파일 크기, 통화 완료한다. ReadFile()무언가를 읽을 때까지 실행을 차단 하기 때문에 nssm 은 애플리케이션이 다음 출력 라인을 생성할 때까지 실제로 파일을 회전하지 않습니다.

nssm 은 응용 프로그램의 출력이 유니코드인지 ANSI인지 알지 못하므로 파일에 첫 번째 데이터를 쓰거나 회전하기 전에 IsTextUnicode()사용 중인 텍스트 인코딩을 확인하기 위해 호출 합니다. 유니코드인 경우 nssm 은 UTF-16 바이트 순서 마커를 새 파일의 시작 부분에 작성하여 텍스트 편집기로 열 때 올바르게 읽을 수 있도록 합니다.

stdout과 stderr이 모두 리디렉션되고 파일을 분리하는 경우 nssm 은 각각에 대한 쓰기 스레드를 생성합니다. nssm 은 유니코드로 stdout을, ANSI로 stderr을 작성하는 응용 프로그램을 처리합니다. 또는 그 반대의 경우도 마찬가지입니다.

위에서부터 온라인 회전에는 여러 가지 함정이 있음이 분명해야 합니다. nssm 은 I/O 프로세스 동안 문제를 정상적으로 처리하려고 시도하지만 출력이 너무 커서 선택의 여지가 없는 경우가 아니면 안전을 위해 온라인 회전을 사용하지 않는 것을 고려해야 합니다.

환경 변수

버전 2.11부터 nssm 은 srvany 에서 지원 하는 AppEnvironment 레지스트리 값을 따릅니다 . 모니터링되는 애플리케이션에 전달할 환경 변수 목록을 지정하려면 다중값 문자열(REG_MULTI_SZ) 값 HKLM\System\CurrentControlSet\Services\ servicename \Parameters\AppEnvironment를 생성합니다. 여기서 각 항목은 KEY=VALUE 형식 입니다.

환경 변수 KEY 가 존재하기를 원하지만 = 기호가 필수인 경우 VALUE 를 생략 할 수 있습니다 잘못된 환경이 지정되면 서비스가 실행되지 않습니다!

버전 2.19부터 nssm 은 AppEnvironment 와 동일한 형식을 가져야 하는 AppEnvironmentExtra 레지스트리 값 도 존중합니다 설정 환경 변수 AppEnvironmentExtra이 됩니다 추가 서비스의 기본 환경.

과의 호환성을 위해 SrvAny를 , 지정된 환경 변수 AppEnvironment는 것이다 교체 서비스 시작시 시스템에 의해 그 세트를. 그것은 아마도 당신이 원하는 것이 아니므로 대신 AppEnvironmentExtra를 사용하십시오.

 

 

명령줄에서 서비스 관리

nssm 의 핵심 기능은 항상 명령줄에서 사용할 수 있습니다.

서비스 설치


 

 

 

기본적으로 서비스의 시작 디렉토리는 program서비스가 설치된 후에 시작 디렉터리를 재정의할 수 있습니다.


 

서비스 제거


 

 

 

서비스 관리

버전 2.22부터 nssm 은 기본 서비스 관리 기능을 제공합니다. nssm 은 또한 서비스 가 다른 서비스의 이름 또는 표시 이름과 충돌하는 이름 또는 표시 이름을 갖는 것을 허용하지 않기 때문에 Windows가 서비스 가 예상되는 displayname모든 위치 에서 서비스를 수락합니다 servicename서비스 이름(서비스 키 이름이라고도 함)과 표시 이름은 모두 서비스를 고유하게 식별합니다.

서비스 시작 및 중지


 

 

 

서비스 상태 쿼리


 

서비스에 제어 보내기


 

 

 

nssm rotateI/O 리디렉션 및 온라인 교체가 활성화된 nssm 서비스에 대한 주문형 교체 를 트리거합니다 nssm 은 사용자 정의 컨트롤(128)을 출력 파일 회전을 시작하기 위한 신호로 받아들입니다. 비 nssm 서비스는 고유한 방식으로 제어 128에 응답할 수 있습니다(또는 무시하거나 충돌).

서비스 편집

버전 2.22부터 nssm 이 이해하는 모든 매개변수 는 명령줄에서 쿼리하거나 구성할 수 있습니다. 시스템 매개변수의 하위 집합도 쿼리할 수 있으며 경우에 따라 수정할 수 있습니다.

일반 구문

매개변수는 일반적으로 다음과 같이 쿼리할 수 있습니다.


 

일부 매개변수는 모호하며 하위 매개변수가 필요합니다. 아래를 참조하십시오 .


 

매개변수는 일반적으로 비슷한 방식으로 설정할 수 있습니다.


 

 

대부분의 매개변수는 관련 레지스트리 항목을 제거하는 것과 동일한 기본값으로 재설정할 수 있습니다.


 

 

편의상 nssm 은 value필요한 것 이상의 추가 인수를 허용 하고 단일 공백으로 구분하여 함께 연결합니다. 따라서 다음 두 호출은 동일합니다.

"-classpath C:\Classes"
-classpath C:\Classes

매개변수

parameter는 일반적으로 관련 기능을 제어하는 ​​레지스트리 항목과 이름이 같은 문자열입니다. 예를 들어 다음 명령은 서비스의 시작 디렉터리를 설정합니다.

AppDirectory

가치

대부분의 매개변수는 연결된 레지스트리 항목에 대해 설명된 것과 동일한 값을 설정하여 구성됩니다 예를 들어 파일 회전 을 활성화하려면 다음 명령을 사용합니다.

1

값이 다르게 설정된 매개변수 목록은 아래 를 참조하십시오 .

기본 매개변수

특정 매개변수는 nssm 동작이 아닌 서비스 자체의 속성을 구성합니다 그들 역시 관련된 레지스트리 값의 이름을 따서 명명되었습니다.

  • DependOnGroup: 서비스를 시작하기 전에 구성원이 시작되어야 하는 로드 순서 그룹입니다.

  • DependOnService: 서비스를 시작하기 전에 시작해야 하는 서비스입니다.

  • 설명: 서비스 설명

  • DisplayName: 서비스의 표시 이름(예: Application Layer Gateway Service ) . 이것은 services.msc 의 이름 열 아래에 표시되는 이름 입니다.

  • ImagePath: 서비스 실행 파일의 경로(예: C:\Windows\System32\alg.exe ) . 들어 nssm 서비스,이 할 수있는 경로가 될 것입니다 nssm.exe .

  • ObjectName: 서비스가 실행되는 사용자 계정의 이름입니다. 기본값은 LOCALSYSTEM 입니다.

  • 이름: 서비스 키 이름(예: ALG . 키 이름은 변경할 수 없습니다. nssm get <displayname> Name 서비스의 키 이름을 찾는 데 사용할 수 있습니다 .

  • 시작: 서비스의 시작 유형입니다(예: Automatic ) .

  • 유형: 서비스 유형입니다. nssm 은 유형의 서비스만 편집할 수 있습니다 SERVICE_WIN32_OWN_PROCESS.

비표준 매개변수

  • nssm getAppEnvironment 및 AppEnvironmentExtra 와 함께 사용 하면 선택적 하위 매개변수가 허용됩니다. 하위 매개변수를 지정하지 않으면 nssm get구성된 모든 환경 변수를 KEY=VALUE 형식으로 한 줄에 하나씩 인쇄합니다 하위 매개변수가 제공되면 nssm get명명된 환경 변수에 대해 구성된 값을 인쇄하거나 해당 변수가 환경 블록에 없으면 빈 문자열을 인쇄합니다.

    예를 들어 AppEnvironmentExtra 가 두 개의 변수 CLASSPATH=C:\Classes 및 TEMP=C:\Temp 로 구성 되었다고 가정합니다 다음 호출:

    AppEnvironmentExtra

    인쇄할 것입니다:

    
     

    반면 구문은 다음과 같습니다.

    CLASSPATH

    인쇄할 것입니다:

    
     

    로 환경 블록을 설정할 때 nssm set각 변수는 별도의 인수에서 KEY=VALUE 쌍 으로 지정되어야 합니다 예:

    CLASSPATH=C:\Classes TEMP=C:\Temp
  • AppExit의 매개 변수를 가져 오거나 설정하는 종료 코드를 지정하는 하위 매개 변수가 필요합니다. 기본 작업은 Default 문자열로 지정할 수 있습니다 .

    예를 들어 서비스에 대한 기본 종료 작업을 가져오려면 다음을 실행해야 합니다.

    기본값

    애플리케이션이 종료 코드 2로 종료될 때 종료 조치를 얻으려면 다음을 실행하십시오.

    2

    지정된 종료 코드에 대해 명시적 작업이 구성되지 않은 경우 nssm 은 기본 종료 작업을 인쇄합니다.

    애플리케이션이 종료 코드 2로 종료될 때 서비스가 중지되도록 구성하려면 다음을 실행합니다.

    종료
  • AppPriority의 매개 변수는에 지정된 우선 순위 클래스 상수합니다 SetPriorityClass()문서를. 유효한 우선 순위는 다음과 같습니다.

    • REALTIME_PRIORITY_CLASS
    • HIGH_PRIORITY_CLASS
    • ABOVE_NORMAL_PRIORITY_CLASS
    • NORMAL_PRIORITY_CLASS
    • BELOW_NORMAL_PRIORITY_CLASS
    • IDLE_PRIORITY_CLASS

비표준 기본 매개변수

반드시 빈 암호로 계정을 구성해야 하는 경우 다음을 실행합니다.

""
  • 와 함께 사용되는 nssm set경우 DependOnGroup 및 DependOnService 매개변수는 각 후속 명령줄 인수를 종속성 그룹 또는 서비스로 처리합니다.

    그룹은 SC_GROUP_IDENTIFIER 접두사( + 기호)를 사용하거나 사용하지 않고 지정할 수 있습니다 서비스는 키 이름 또는 표시 이름을 통해 지정할 수 있습니다.

    다음 두 호출은 동일합니다.

    
     
    
     

    로 SC_GROUP_IDENTIFIER쿼리할 때 그룹에는 항상 접두사가 붙 습니다 nssm get.

  • 와 함께 사용하는 nssm set경우 ObjectName 매개변수에는 서비스를 실행할 사용자의 비밀번호를 지정하는 추가 인수가 필요합니다.

    사용자 이름을 검색하려면 다음을 실행합니다.

    의 ObjectName

    사용자 이름과 암호를 설정하려면 다음을 실행하십시오.

    이름 <사용자 이름> <비밀번호>

    인수 연결 규칙이 여전히 적용됩니다. 다음을 호출하면 예상되는 효과가 나타납니다.

    올바른 말 배터리 스테이플
  • 시작 매개변수의 유효한 값은 다음 과 같습니다.

    • SERVICE_AUTO_START: 부팅 시 자동 시작.
    • SERVICE_DELAYED_AUTO_START: 부팅 시 지연된 시작.
    • SERVICE_DEMAND_START: 수동 시작.
    • SERVICE_DISABLED: 서비스가 비활성화되었습니다.

    참고 SERVICE_DELAYED_AUTO_START가 Vista 이전 버전의 Windows에서 지원되지 않습니다. nssm 은 지연된 시작을 사용할 수 없는 경우 서비스를 자동 시작으로 설정합니다.

  • 유형 매개 변수는 쿼리에 사용하거나 서비스 유형을 설정합니다. nssm 은 현재 문서화된 모든 서비스 유형을 인식하지만 다음 두 가지 유형 중 하나만 설정할 수 있습니다.

    • SERVICE_WIN32_OWN_PROCESS: 독립 실행형 서비스입니다. 이것이 기본값입니다.
    • SERVICE_INTERACTIVE_PROCESS: 데스크톱과 상호 작용할 수 있는 서비스입니다.

    서비스는 LOCALSYSTEM 계정으로 실행되는 경우에만 대화형으로 구성할 수 있습니다 대화형 서비스를 구성하려고 할 때 성공을 보장하려면 다음 두 명령을 순서대로 실행하십시오.

    재설정SERVICE_INTERACTIVE_PROCESS
번호 제목 글쓴이 조회 추천 등록일
[공지] 저작권 보호 요청 자료 목록 gooddew - - -
[공지] 자료실 이용간 유의사항 gooddew - - -
12365 기 타| 단일-4K Video Downloader_4.17.0.4400x64 [10] 첨임다 1467 19 07-25
12364 기 타| 단일-GoodSync2Go_11.7.8.8 [7] 첨임다 968 12 07-25
12363 유틸리티| GoodSync Enterprise 11.7.8.8 with Patch [1] 그림자7 865 0 07-24
12362 유틸리티| Win11 하드/SSD에서 바로설치 [2] 복원솔루션 2758 1 07-24
12361 유틸리티| 유령 (Datecode.2021-06-29) [9] 디폴트 2735 10 07-24
12360 한글패치| WinNc 9.9.0.한글팩 [6] 김영감™ 1341 8 07-23
12359 기 타| 단일-slimjet_31.0.2.0 [4] 첨임다 925 6 07-23
12358 기 타| portable-LibreOffice 7.1.5 한글(x64) [13] 첨임다 1345 21 07-23
12357 윈도우 / PE| Windows 11 Insider Preview Build 22000.100 [6] 박삿갓 1780 8 07-23
12356 한글패치| AOMEI OneKey Recovery 1.6.4 한글화 [7] 달마s 4782 14 07-22
12355 유틸리티| IObit Driver Booster Pro 8.6.0.522 Multilingual [2] 그림자7 1184 3 07-22
12354 기 타| T.Dism 9.0 [11] 틱톡88 1471 29 07-21
12353 윈도우 / PE| WinPE 10-8 Sergei Strelec (x86/x64/Native x86) 2021.07.... [10] 디폴트 2393 8 07-21
12352 유틸리티| NSIS 포터블 예제 4: Turbo Studio 21.7.1539 Portable [4] wholish 763 4 07-21
12351 유틸리티| Google Chrome 92.0.4515.107 포터블입니다. [9] maniaa 843 14 07-21
12350 유틸리티| Ashampoo Snap 12.0.6 Portable [1] 클라크 507 0 07-21
12349 유틸리티| Revo Uninstaller Pro 4.4.8 RePack [3] 클라크 1089 2 07-21
12348 기 타| MultiPar v1.3.1.8 Beta Portable [1] DarknessAn 562 2 07-21
12347 기 타| portable-CCleaner5.83.9050(x64) [18] 첨임다 1810 25 07-20
12346 기 타| Palemoon 29.3.0 with Flash Player x86 Portable [2] DarknessAn 577 2 07-20
XE1.11.6 Layout1.4.8