기타
[LINUX] systemd (service+timer)
phyho
2025. 6. 3. 13:41
특정 스크립트 파일을 실행시키는 스케쥴러를 만든다고 할 때,
systemd (service+timer)
1. service
하위 경로에 'backup' 이라는 이름의 service를 만들어 준다.
/etc/systemd/system/backup.service
(기본 구성)
[Unit]
Description=Daily backup script service
[Service]
Type=simple
ExecStart=/home/user/scripts/backup.sh
- Description
서비스에 대한 간략한 설명.
- Type
서비스가 어떻게 시작되고 동작할지에 대한 설정. (기본값 : simple )
- simple (기본값) : 명령을 포그라운드로 실행. systemd는 명령 실행 즉시 서비스 시작됨으로 간주.
- forking : 명령이 백그라운드로 fork() 하고 부모 프로세스는 종료.
- oneshot : 짧게 한 번만 실행되는 작업. 끝나면 종료.
이외에도 notify, idle, exec 등..
- ExecStart
실제 실행할 명령어.
(추가구성) _ [Unit]
Restart=on-failure # 서비스 실패 시 재시작 여부
RestartSec=5 # 대기 시간
- Restart
서비스 실패 시 재시작 여부
- RestartSec
대기 시간
(추가구성) _ [Service]
Restart=on-failure # 서비스 실패 시 재시작 여부
RestartSec=5 # 대기 시간
- Restart
서비스 실패 시 재시작 여부
- RestartSec
대기 시간
실행로그 확인
journalctl -u backup.service
2. timer
service와 같은 경로에 'backup' 이라는 이름의 timer를 만들어 준다.
/etc/systemd/system/backup.timer
(기본 구성)
[Unit]
Description=Run daily backup at 3AM
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
systemd vs crontab
항목 | systemd + timer | crontab |
의존성 관리 | 다른 서비스/유닛들과 의존성 설정 가능 (After=, Requires= 등) |
없음 |
로그 관리 | journalctl로 표준화된 로그 확인 가능 | 표준 로그 분리 설정 필요 (기본은 로그 저장 안됨) |
정확도 | 밀리초 단위도 가능 | 분 단위 스케줄만 가능 |
서비스 통합 | 다른 systemd 유닛들과 통합 관리 | 독립적으로 동작 |
작업 실패 시 재시도 | 설정 가능 (Restart=, StartLimitIntervalSec= 등) | 직접 구현 필요 |
보안 및 권한 제어 | sandboxing, User=, ProtectSystem= 등의 고급 보안 설정 가능 |
사용자 환경에 의존 |
설정 위치 | /etc/systemd/system/*.service, *.timer | 각 사용자 계정의 crontab 혹은 /etc/crontab |