systemd 서비스 만들기 관련 가이드이다. 전용 사용자와 절대 경로를 사용해 systemd unit을 만들고 의존성, 정상 종료, 재시작 제한, 보안 옵션과 journal을 검증한다. 명령을 복사하기 전에 대상과 권한, 변경 범위, 복구 경로를 먼저 확인해야 한다. 이 글은 개념, 적용 순서, 실제 코드 블록, 검증과 문제 해결을 하나의 운영 절차로 정리한다.

예시는 이해를 돕기 위한 값이다. 호스트명, 사용자, 장치, 경로와 네트워크 대역을 실제 환경에 맞게 바꾼다. 운영 변경은 현재 상태와 설정을 백업하고 콘솔 또는 별도 관리 세션을 확보한 뒤 진행한다.

systemd 서비스 만들기: Linux 컨테이너와 systemd 서비스의 시작, 상태, 로그, 네트워크와 복구 흐름
systemd 서비스 만들기에서 구성 요소, 보안 경계, 상태 확인과 복구 흐름

systemd 서비스 만들기: 핵심 개념과 범위

systemd 서비스 만들기 관련 설정을 정확히 적용하려면 명령 이름보다 구성 요소 사이의 관계를 이해해야 한다. 조회 결과와 설정 파일, 실행 프로세스, 로그와 실제 서비스 응답을 서로 대조한다.

구분 운영 기준
실행 단위 컨테이너 또는 systemd 서비스의 이미지·명령·환경·사용자
수명 주기 시작·중지·재시작·상태·로그·장애 복구 정책
보안 경계 비특권 사용자, 자원 제한, 포트 노출, 파일 권한과 비밀 관리

이 글에서 바로잡는 핵심 사항

  • ExecStart에는 셸 문법이 자동 적용되지 않는다.
  • Restart=always 대신 실패 조건과 시작 제한을 설계한다.
  • 비밀은 unit 파일의 Environment에 직접 넣지 않는다.

systemd 서비스 만들기: 적용 전 안전 점검

  1. 실행 파일 또는 이미지의 출처와 버전을 고정하고 변경 기록을 남긴다.
  2. 전용 비특권 계정과 필요한 최소 파일·네트워크 권한을 정의한다.
  3. 시작 전 검사, 정상 종료 시간, 재시작 조건과 의존 서비스를 명시한다.
  4. 표준 출력·오류와 journal 또는 컨테이너 로그의 보존 정책을 설정한다.
  5. 재부팅·프로세스 실패·설정 오류 상황에서 자동 복구와 수동 롤백을 시험한다.
변경 명령을 실행하기 전에 조회 명령으로 대상을 확정한다. 현재 세션과 백업, 서비스별 롤백 명령을 확보하지 않았다면 운영 환경에 바로 적용하지 않는다.

systemd 서비스 만들기: 명령어와 설정 예시

아래 명령은 단계별로 실행한다. 각 코드 블록이 성공했다고 다음 단계까지 자동으로 안전한 것은 아니다. 출력, 종료 코드와 로그를 확인한 뒤 진행한다.

1단계: 현재 상태 확인

sudo useradd --system --home-dir /var/lib/myapp --shell /sbin/nologin myapp
sudo install -d -o myapp -g myapp -m 0750 /var/lib/myapp /var/log/myapp

2단계: 설정 또는 안전한 작업

[Unit]
Description=My application
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=myapp
Group=myapp
WorkingDirectory=/var/lib/myapp
ExecStart=/usr/local/bin/myapp --config /etc/myapp/config.yml
Restart=on-failure
RestartSec=5s
NoNewPrivileges=yes
PrivateTmp=yes

[Install]
WantedBy=multi-user.target

3단계: 결과 검증

sudo systemd-analyze verify /etc/systemd/system/myapp.service
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
systemctl --no-pager --full status myapp
journalctl -u myapp -b --no-pager

운영 검증과 문제 해결

검증은 명령의 성공 메시지에서 끝나지 않는다. 실행 주체, 실제 파일·프로세스·소켓 상태, 서비스 로그와 사용자 관점의 기능 시험을 함께 확인한다. 실패했다면 같은 명령을 반복하기보다 마지막 변경과 정상 기준선의 차이를 좁혀야 한다.

  • 실행 직후 종료되면 실제 명령, 종료 코드와 표준 오류를 먼저 확인한다.
  • 재시작 반복은 원인을 숨길 수 있으므로 시작 제한과 실패 상태를 함께 기록한다.
  • 포트 충돌과 권한 오류는 리스닝 소켓, 실행 사용자와 마운트 권한을 대조한다.
변경 전후 출력, 사용한 패키지와 버전, 담당자, 작업 시각, 검증 결과와 롤백 여부를 작업 기록에 남긴다. 반복 작업은 테스트 환경에서 재현한 뒤 자동화한다.

운영 체크리스트

  • 대상 호스트·사용자·장치·파일·서비스를 명확히 식별했다.
  • 현재 설정과 중요 데이터를 별도 위치에 백업했다.
  • 최소 권한 계정과 필요한 네트워크 범위를 사용했다.
  • 명령어와 설정 예시는 실제 환경 값으로 교체했다.
  • 새 세션 또는 독립된 클라이언트에서 기능을 검증했다.
  • 로그·모니터링·백업·복구 절차와 담당자를 확인했다.

공식 문서와 관련 가이드

systemd 서비스 만들기 관련 작업의 완료 기준은 명령이 한 번 실행되는 상태가 아니다. 재부팅이나 새 세션에서도 설정이 유지되고, 권한과 노출 범위가 의도와 맞으며, 오류를 탐지하고 안전하게 되돌릴 수 있어야 한다.