Cron
cron은 Unix 계열 운영체제의 작업 스케줄러이다. 소프트웨어 환경을 설정하고 유지 관리하는 사용자는 cron을 사용하여 작업(command or shell script)을 예약하여 cron 작업이라고도 하며 고정된 시간, 날짜, 간격으로 주기적으로 실행한다. 일반적으로 시스템 유지 관리를 자동화하지만 범용 특성으로 인해 인터넷에서 파일을 다운로드하고 정기적으로 이메일을 다운로드하는 것과 같은 작업에 유용하다. 반복작업을 예약하는 데 가장 적합하고 일회성 작업 예약은 at 유틸리티를 사용하여 수행할 수 있다.
Syntax
# ┌───────────── 분 (0 - 59)
# │ ┌───────────── 시(0 - 23)
# │ │ ┌─── ────────── 요일(1 - 31)
# │ │ ┌───────────── 월(1 - 12)
# │ │ │ │ ┌─ ──────────── 요일(0 - 6)(일요일~토요일, 일부 시스템에서는 # │ │ │ │ 7도 일요일임)
# │ │ │ │
# │ │ │ │ │
# * * * * * <실행 명령>
cron macro
| @yearly(또는 @annually) | 1년에 한 번 1월 1일 자정에 실행 | 0 0 1 1 * |
| @monthly | 매월 1일 자정에 한 달에 한 번 실행 | 0 0 1 * * |
| @weekly | 일주일에 한 번 일요일 아침 자정에 실행 | 0 0 * * 0 |
| @daily(또는 @midnight) | 하루에 한 번 자정에 실행 | 0 0 * * * |
| @hourly | 시간 시작 시 한 시간에 한 번 실행 | 0 * * * * |
| @reboot | 시작 시 실행 | — |
| 분 | 필수 | 0–59 | * , - | |
| 시간 | 필수 | 0–23 | * , - | |
| 날짜 | 필수 | 1–31 | * , - ? L W | ? L W일부 구현에서만 |
| 월 | 필수 | 1~12 / JAN ~ DEC | * , - | |
| 요일 | 필수 | 0–6 / SUN ~ SAT | * , - ? L # | ? L #일부 구현에서만 |
| 년도 | 생략가능 | 1970–2099 | * , - |
특수문자 의미
| * | 모든수 |
| ? | 해당 항목을 미사용 |
| - | 기간 설정 |
| , | 특정 기간 설정 |
| / | 시작시간과 반복 간격 설정 |
| L | 마지막 기간에 동작 |
| W | 가장 가까운 평일에 동작 |
| # | 몇 번째 주, 요일 설정 |
Example
매일 자정(00:01) 1분에 Apache 오류 로그를 지운다.
1 0 * * * printf "" > /var/log/apache/error_log
매주 토요일 23:45(오후 11:45)에 export_dumps.sh라는 셸 스크립트를 실행한다.
45 23 * * 6 /home/oracle/scripts/export_dump.sh
*/n 마다 실행할 수도 있다. 쉼표(:)를 사용하여 여러개의 특정 시간 간격을 지정할 수 있다.
1, 2, 3시의 5분마다 "hello world"를 출력한다. (01:00, 01:05, 01:10, 03:55까지)
*/5 1,2,3 * * * echo hello world
Quartz Cron
cron 표현식은 크게 유닉스(Unix)와 쿼츠(Quartz)로 구분된다.
Syntax
| 초 | 필수 | 0-59 | * , - | |
| 분 | 필수 | 0–59 | * , - | |
| 시간 | 필수 | 0–23 | * , - | |
| 날짜 | 필수 | 1–31 | * , - ? L W | ? L W일부 구현에서만 |
| 월 | 필수 | 1~12 / JAN ~ DEC | * , - | |
| 요일 | 필수 | 0–6 / SUN ~ SAT | * , - ? L # | ? L #일부 구현에서만 |
| 년도 | 생략가능 | 1970–2099 | * , - |
Example
매일 12시에 실행
0 0 12 * * ?
매일 오전 10시 15분에 실행
0 15 10 * * ?
오후 14시에서 15시 사이에 매 분마다 실행
0 * 14 * * ?
매일 14시에 시작하여 14시 55분까지 5분마다 실행, 20시 정각부터 20시 55분까지 5분마다 실행
0 0/5 14,20 * * ?
매주 월요일과 금요일 사이 20시에 실행
0 0 20 ? * MON-FRI
매달 15일 10시 15분에 실행
0 15 10 15 * ?
매달 마지막 날 10시 15분에 실행
0 15 10 L * ?
2020년부터 2021년 매달 마지막 토요일 10시 15분에 실행
0 15 10 ? * 6L 2020-2021
매달 15일 10시 15분에 실행
0 15 10 15 * ?
1월 1일 11시 11분마다 실행
0 11 11 1 1 ?
Reference
'linux' 카테고리의 다른 글
| linux task mangement (1) | 2022.10.05 |
|---|---|
| 리눅스 커널 구조 (0) | 2022.10.05 |
| 운영체제 동작 사례 (0) | 2022.10.04 |
| Makefile tutorial (0) | 2022.09.28 |
| Linux File System (0) | 2022.09.27 |