본문 바로가기

서버 관리/리눅스

service 파일

[1. 개요]

.service 파일 (systemd 서비스 파일) 은 특정 프로세스를 systemd 에 등록하여

자동 실행 및 관리하도록 하는 설정 파일이다.

 

보통, 아래 경로에 위치한다.

  • /etc/systemd/system
  • /usr/lib/systemd/system

이 파일은 보통 3개의 섹션으로 구성 된다.

  1. [Unit]
  2. [Service]
  3. [Install]

[2. Unit]

이 섹션에는 메타데이터 와 의존성 관해서 기술한다.

  • Description
  • Documentation
  • Requires
    # network.target : 네트워크 스택을 요구한다.
    # network-online.target : 네트워크 연결이 실제로 가능한 상태
  • Wants
  • After
    # network.target : 네트워크가 준비된 이후 실행하도록 한다.
    # network-online.target : 네트워크 연결이 실제로 가능한 상태
  • Before

[3. Service]

가장 중요한 부분으로, 서비스를 어떻게 실행할 지 정의한다.

  • Type
    # simple : 기본 값, 
    # forking : 
    # oneshot : 
  • ExecStartPre
    # ExecStart 전에 실행 
  • ExecStart
    # 서비스 실행 시 수행 할 명령어
    # systemctl start ...
  • ExecStartPost
    # ExecStart 성공 시 실행
  • TimeoutSec
    # 서비스 시작/정지 시 대기시간
    # 명시한 시간 내 처리되지 않으면 실패 처리
  • ExecStop
    # 서비스 중지 시 수행 할 명령어 ($MAINPID)
    # systemctl stop ...
  • KillSignal
    # ExecStop 이 실행 후에도 프로세스가 종료되지 않은 경우 실행
    # 여기에 지정 한 시그널이 발생함.
  • TimeoutStopSec
    # 여기에 지정 한 시간 이후에도 프로세스가 종료되지 않은 경우 SIGKILL 로 강제 종료
  • ExecStopPost
    # ExecStop ~ KillSignal 이 후 가장 마지막에 실행 됨.
  • Restart
    # 프로세스 종료 시 재시작 여부 지정
    # no : 재시작 안함
    # always : 항상 재시작
    # on-failure : 비정상 종료 시에만 재시작
    # on-success : 정상 종료 시에만 재시작
  • RestartSec
    # Restart 전 대기 시간
  • User
  • Group
  • WorkingDirectory
  • Environment
  • EnvironmentFile
  • StandardOutput
  • StandardError
  • LimitCore
    # 비정상 종료 시 core 파일을 생성 하기 위함
    # infinity 

systemctl 의 start / stop / restart 관점으로 실행 흐름은

  • start : ExecStartPre -> ExecStart -> ExecStartPost
  • stop : ExecStop -> KillSignal -> ExecStopPost
    ## ExecStop 과 KillSignal 이 모두 정의 되었다면, ExecStop 후 KillSignal 도 발생 함.
    ## 가급적 하나만 명시하는게 좋음, (KillSignal 이 명시하지 않은 경우, SIGKILL 발생)
  • restart : stop 후 start 

Restart 에서 on-failure 인 경우는

  • 프로세스의 exit code 가 0 이 아니거나
  • 아래와 같은 signal 에 의해 종료 된 경우 (core dump 를 남길 수 있는 레벨인 경우)
    # SIGSEGV
    # SIGABRT
    # SIGPIPE
    # SIGILL
    # SIGBUS
    # SIGKILL
    # SIGQUIT
  • 아래는 정상 종료료 간주한다.
    # SIGTERM
    # SIGINT
    # SIGHUP

[4. Install]

이 섹션에는 서비스를 어떻게 설치해서 어떤 상황에서 자동 실행할지 구체적으로,

# systemctl enable ... 시, 어떤 target 에 심볼릭 링크로 묶일 지 정의한다.

  • WantedBy
    # multi-user.target : 콘솔 기반(서버 등) 에서 실행 할 서비스
    # graphical.target
  • RequiredBy
  • Alias

[5. 기타]

.service 파일을 수정 한 후 에는 반드시 systemctl daemon-relaod 를 호출하여 업데이트 해주도록 한다.

'서버 관리 > 리눅스' 카테고리의 다른 글

update-alternatives  (0) 2025.08.30
리눅스 크래시 로그 파악하기  (1) 2025.08.26
ulimit  (0) 2025.07.03
리눅스 패키지 관리  (0) 2025.05.01
samba 서버 설치  (0) 2025.05.01