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.serviceman systemd.unitman systemd.execman systemd.kill
참조용 기존 서비스 설정 탐색:
ls /lib/systemd/system