Aller au contenu principal

43. Create systemd Services


개요

이 가이드는 애플리케이션 생명주기를 관리하고, 지속적인 운영과 충돌 시 자동 재시작을 보장하는 systemd 서비스 파일 구축 방법을 설명합니다.

샘플 애플리케이션 빌드

/usr/local/bin/myapp.sh에 실행 스크립트 생성:

#!/bin/sh
echo "MyApp Started" | systemd-cat -t MyApp -p info
sleep 5
echo "MyApp Crashed" | systemd-cat -t MyApp -p err

실행 권한 부여:

sudo chmod +x /usr/local/bin/myapp.sh

이 스크립트는 시작을 로깅하고, 5초 대기 후 충돌을 시뮬레이션합니다. systemd-cat은 태그와 우선순위와 함께 메시지를 시스템 로그에 직접 전달합니다.

주요 systemd 옵션 이해

man systemd.service 에서 핵심 설정 파라미터 확인:

  • Restart: 자동 재시작 조건 결정
  • RestartSec: 재시작 루프 방지를 위한 지연 시간 설정
  • RestartSteps, RestartMaxDelaySec, TimeoutStartSec: 세밀한 재시작 동작 제어

서비스 파일 생성

기존 서비스를 템플릿으로 복사:

sudo cp /lib/systemd/system/ssh.service /etc/systemd/system/myapp.service

[Unit] 섹션

[Unit]
Description=My Application
After=network.target auditd.service

[Service] 섹션

[Service]
ExecStartPre=/bin/echo "Systemd is preparing to start MyApp"
ExecStart=/usr/local/bin/myapp.sh
KillMode=process
Restart=always
RestartSec=1
Type=simple

주요 설정:

설정의미
KillMode=process메인 프로세스만 종료
Restart=always종료 상태와 관계없이 항상 재시작
RestartSec=1재시작 간 1초 지연
Type=simple준비 알림 없는 스크립트에 적합

[Install] 섹션

[Install]
WantedBy=multi-user.target

활성화 및 모니터링

systemd 재로드 후 서비스 시작:

sudo systemctl daemon-reload
sudo systemctl start myapp.service

실시간 로그 확인:

sudo journalctl -f

로그 모니터링 종료: Ctrl-C

추가 자료

심화 학습을 위한 매뉴얼 페이지:

  • man systemd.service
  • man systemd.unit
  • man systemd.exec
  • man systemd.kill

참조용 기존 서비스 설정 탐색:

ls /lib/systemd/system