본문 바로가기

Linux Unix

[ Linux ] service 등록 (2) - 서비스 파일 옵션 알아보기

반응형

systemd 서비스 파일에서 사용 가능한 옵션은 다양하며, 주로 서비스의 동작을 정의하고 제어하는 데 사용됩니다. 여기서는 서비스 파일의 주요 섹션과 옵션을 모두 소개합니다.

서비스 파일의 구조

systemd 서비스 파일은 크게 [Unit], [Service], [Install] 섹션으로 나뉩니다.

1. [Unit] 섹션

이 섹션은 서비스의 일반적인 설명과 동작에 대한 메타데이터를 정의합니다.

  • Description: 서비스에 대한 설명을 추가합니다.
  Description=My custom service
  • Documentation: 서비스의 문서 URL을 지정합니다.
  Documentation=https://example.com/documentation
  • Requires: 서비스가 시작되기 전에 필수로 필요한 다른 유닛을 지정합니다.
  Requires=network.target
  • Wants: 선택적으로 필요한 다른 유닛을 지정합니다. Requires와 다르게 이 유닛이 실패해도 계속 실행됩니다.
  Wants=network-online.target
  • After: 이 서비스가 시작되기 전에 실행되어야 하는 유닛을 지정합니다.
  After=network.target
  • Before: 이 서비스가 시작되기 전에 정지되어야 하는 유닛을 지정합니다.
  Before=multi-user.target
  • Conflicts: 지정된 유닛과 충돌하는 경우 이 유닛이 실행되면 다른 유닛은 중지됩니다.
  Conflicts=other.service

2. [Service] 섹션

이 섹션은 서비스의 실행 방법 및 속성을 정의합니다.

  • Type: 서비스의 유형을 지정합니다. 기본값은 simple입니다.
    • simple: 서비스가 바로 실행되고, 종료 신호를 기다리지 않습니다.
    • forking: 프로세스가 포크(fork)된 후 백그라운드로 전환됩니다.
    • oneshot: 단일 작업이 완료되면 종료됩니다.
    • notify: 서비스가 시작됨을 시스템에 알립니다.
    • idle: 다른 모든 작업이 완료된 후 실행됩니다.
  Type=simple
  • ExecStart: 서비스가 시작될 때 실행할 명령어를 지정합니다.
  ExecStart=/usr/bin/my-service
  • ExecStop: 서비스가 중지될 때 실행할 명령어를 지정합니다.
  ExecStop=/usr/bin/my-service-stop
  • ExecReload: 서비스가 다시 로드될 때 실행할 명령어를 지정합니다.
  ExecReload=/usr/bin/my-service-reload
  • Restart: 서비스가 실패했을 때 재시작할 조건을 지정합니다.
    • no, on-success, on-failure, on-abnormal, on-abort, always
  Restart=on-failure
  • RestartSec: 서비스가 재시작될 때 대기할 시간을 초 단위로 지정합니다.
  RestartSec=5s
  • User: 서비스를 실행할 사용자 계정을 지정합니다.
  User=nobody
  • Group: 서비스를 실행할 그룹을 지정합니다.
  Group=nogroup
  • WorkingDirectory: 서비스의 작업 디렉토리를 설정합니다.
  WorkingDirectory=/var/my-service
  • Environment: 환경 변수를 설정합니다.
  Environment="VAR1=value1" "VAR2=value2"
  • StandardOutputStandardError: 표준 출력 및 표준 오류를 파일, null, syslog 등으로 리디렉션합니다.
  StandardOutput=syslog
  StandardError=syslog

3. [Install] 섹션

이 섹션은 서비스가 설치될 때 어떻게 처리될지 정의합니다.

  • WantedBy: 이 서비스가 설치될 때 활성화되는 대상(target)을 지정합니다.
  WantedBy=multi-user.target
  • RequiredBy: 이 유닛이 필수로 요구되는 대상(target)을 지정합니다.
  RequiredBy=graphical.target
  • Alias: 유닛의 별칭을 설정합니다.
  Alias=my-alias.service

이 외에도 여러 옵션이 있지만, 위의 옵션들이 가장 자주 사용되고 중요한 설정입니다. 서비스의 동작과 상태를 제어하기 위해 필요한 경우 위의 옵션들을 조합하여 사용하면 됩니다.

반응형