윈도우 서비스 등록하기

윈도우 서비스를 등록하면 시스템 시작 시 자동으로 실행되게 설정할 수 있다. 이는 특정 애플리케이션이 항상 실행되어야 할 때 유용하다.

윈도우 서비스 등록 방법 (3가지)

  1. 명령 프롬프트(CMD) sc 명령어
  2. PowerShell의 New-Service cmdlet
  3. NSSM

명령 프롬프트(CMD)에서 sc create 명령어 사용하기

sc는 Service Control의 약자로, Windows 서비스와 관련된 대부분의 작업을 처리할 수 있는 강력한 명령어 도구

sc create [서비스 이름] binPath= "[실행 파일 경로]"

[서비스 이름]: 시스템에서 서비스를 식별하는 데 사용될 고유한 이름. (예: MyCustomService)

[실행 파일 경로]: 서비스로 등록할 .exe 파일의 전체 경로입니다. 경로에 공백이 포함된 경우 반드시 큰따옴표(“)로 묶어야 한다.

주요 옵션과 함께 사용하는 예시

실제로 서비스를 등록할 때는 몇 가지 추가 옵션

  • DisplayName: 서비스 관리자나 작업 관리자에 표시될 이름
  • start: 서비스 시작 유형을 지정
    • auto: 시스템 시작 시 자동으로 실행
    • demand: 수동으로 실행 (기본값)
    • disabled: 사용 안 함
  • obj: 서비스를 실행할 계정을 지정합니다. (기본값: LocalSystem)
    • LocalSystem: 시스템 최고 권한
    • NT AUTHORITY\LocalService: 네트워크 접근 권한이 없는 기본 사용자
    • NT AUTHORITY\NetworkService: 네트워크 접근 권한이 있는 기본 사용자
    • 기타 사용자 계정 (예: .\UserName)
  • password: obj에서 지정한 계정의 비밀번호

실패

성공(관리자 권한으로 실행)

PowerShell에서 New-Service cmdlet 사용하기

New-Service -Name [서비스 이름] -BinaryPathName "[실행 파일 경로]"
  • Name: 서비스의 고유 이름
  • BinaryPathName: 서비스로 등록할 .exe 파일의 전체 경로

주요 옵션과 함께 사용하는 예시

옵션

  • DisplayName: 서비스 관리자에 표시될 이름
  • StartupType: 서비스 시작 유형을 지정
    • Automatic: 자동으로 실행
    • Manual: 수동으로 실행
    • Disabled: 사용 안 함
  • Credential: 서비스를 실행할 사용자 계정 정보를 지정

NSSM (Non-Sucking Service Manager) 사용

위 예시에서 nginx를 사용했지만 실제로 등록 후 시작하면 nginx는 실행이되지 않는다. 따라서 NSSM을 사용해야 한다.

사용 방법 예시

1. NSSM 다운로드: NSSM 공식 홈페이지에서 최신 버전을 다운로드하고 압축 해제

2. 명령 프롬프트 실행: 관리자 권한으로 명령 프롬프트(CMD) 또는 PowerShell을 실행하고, NSSM이 있는 폴더로 이동

3. 서비스 설치 GUI 실행: 아래 명령어를 입력하여 서비스 설치 창을 열 수 있음

nssm install nginx

위 명령어 입력하면 아래 서비스 설치창이 열림

4. 설정:

  • Application 탭:
    • Path: 실행할 서비스 파일의 전체 경로를 선택
    • Startup directory: 실행할 서비스가 설치된 폴더 경로를 지정
  • Details 탭: DisplayName에 원하는 서비스 이름을 입력
  • (선택) Shutdown 탭: 정상적인 종료를 위해 nginx -s stop 명령을 등록

5. 서비스 설치: [Install service] 버튼을 클릭

6. 서비스 시작: 아래 명령어나 서비스 관리 창(services.msc)에서 서비스를 시작

// nssm이 설치된 경로에서
nssm start nginx

윈도우 서비스 제거하기

제거하면 서비스 목록에 보이지 않음 제거가 되더라도 보인다면 해당 서비스를 중지하지 않은 상태로 제거했을 수 있음, 이런 경우 중지하면 목록에서 사라짐

명령 프롬프트(CMD) 에서

제거하기 전 서비스는 중지된 상태이어야 함

// sc delete "test-nginx"
sc delete [서비스 이름]

PowerShell 에서

제거하기 전 서비스는 중지된 상태이어야 함

Remove-Service -Name "[서비스 이름]"

NSSM 에서

제거하기 전 서비스는 중지된 상태이어야 함

// nssm.exe 파일 경로에서
nssm remove [서비스 이름]

등록 후 서비스 관리

작업 명령 프롬프트 (sc) PowerShell NSSM
시작 sc start [서비스 이름] Start-Service -Name [서비스 이름] nssm start [서비스 이름]
중지 sc stop [서비스 이름] Stop-Service -Name [서비스 이름] nssm stop [서비스 이름]
삭제 sc delete [서비스 이름] Remove-Service -Name [서비스 이름] nssm remove [서비스 이름]
상태 확인 sc query [서비스 이름] Get-Service -Name [서비스 이름] nssm status [서비스 이름]

댓글