일반적으로 crontab -l 를 이용하여 서버의 스케쥴링을 설정 한다.
Amazon linux 2023 에서는 cronie 가 삭제되었고 당연히 crontab 명령어를 사용할 수 없다. (뭐 설치한다면 사용할 수 있다 -.-a)
그래서 systemd 에서 제공하는 타이머 형태로 사용할 수 있다.
1. crontab -l
과 대응 되는 명령어는 systemctl list-timers
이다.
1 2 3 4 5 6 7 8 |
~]# systemctl list-timers NEXT LEFT LAST PASSED UNIT ACTIVATES Mon 2024-04-29 17:20:00 KST 5min left Mon 2024-04-29 17:10:30 KST 3min 34s ago sysstat-collect.timer sysstat-collect.service Mon 2024-04-29 17:45:17 KST 31min left Sun 2024-04-28 17:45:17 KST 23h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.> Mon 2024-04-29 18:34:33 KST 1h 20min left Mon 2024-04-29 16:45:17 KST 28min ago dnf-makecache.timer dnf-makecache.service Tue 2024-04-30 00:00:00 KST 6h left Mon 2024-04-29 00:00:30 KST 17h ago mlocate-updatedb.timer mlocate-updatedb.service Tue 2024-04-30 00:00:00 KST 6h left Mon 2024-04-29 00:00:30 KST 17h ago unbound-anchor.timer unbound-anchor.service Tue 2024-04-30 00:07:00 KST 6h left Mon 2024-04-29 00:07:09 KST 17h ago sysstat-summary.timer sysstat-summary.service |
2. 기존에는 crontab 과 생성해둔 스크립트 조합으로 실행이 되었지만.
systemd 에서는 생성해둔 스크립트 + 서비스명.service + 서비스명.timer 조합으로 설정 할 수 있다.
아래는 간단한 timer 생성 예 이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[Timer] # every 2 mins OnCalendar=*-*-* *:*/2 Unit=서비스명.service # Mon..Fri *-*-* 08:00 # Mon~Fri AM 08:00 # Sat,Sun *:*:*/10 # weekends every 10 sec # *-*-* *:*:00 # minutely # *-*-* *:00:00 # hourly # *-*-* 00:00:00 # daily # *-*-01 00:00:00 # monthly # Mon *-*-* 00:00:00 # weekly # *-01-01 00:00:00 # yearly # *-01,04,07,10-01 00:00:00 # quarterly # *-01,07-01 00:00:00 # semiannually |
아래는 스크립트를 실행하는 service 생성 예 이다. (Execstart= 에 생성 해둔 스크립트를 넣으면 해당 스크립트가 실행이 되겠다.)
1 2 3 4 5 6 7 |
[Unit] Description=my Service [Service] Type=oneshot User=root ExecStart=/usr/bin/wall echo "systemctl timer test." |
스크립트, 타이머, 서비스 를 모두 생성 했다면 start 또는 enable 을 시켜서 작동을 확인한다.
1 2 |
~]# systemctl start 서비스명.timer ~]# systemctl enable 서비스명.timer |