1. crontab 이란
배치Batch처럼 특정 시간에 정기적으로 ShellScript나 프로그램을 실행 시키기 위한 Crontab 시간 설정을 정리
2. crontab description
※ 기본적으로 아래와 같이 공백(space)으로 5개 값을 구분하여 설정한다.
1 11 3 * * <SHELL_PATH>
분 시 일 월 요일 쉘스크립트경로
※ 1번째
분(minute)을 의미, 몇 분에 실행 할 것인지 설정한다.
ex) 1 11 3 * * <SHELL_PATH>
XX일 XX시 '01분'에 실행
*을 설정할 경우, 매분(1분 마다) 실행을 의미
※ 2번째
시간(hour)을 의미, 몇 시에 실행 할 것인지 설정한다.
ex) 1 11 3 * * <SHELL_PATH>
XX일 '11시' 01분에 실행
*을 설정할 경우, 매시간(1시간 마다) 실행을 의미
※ 3번째
일(day of month)을 의미, 몇 일에 실행 할 것인지 설정한다.
ex) 1 11 3 * * <SHELL_PATH>
'3일' 11시 01분에 실행
*을 설정할 경우, 매일 실행을 의미
※ 4번째
월(month)을 의미, 몇 월에 실행 할 것인지 설정한다.
ex) 1 11 3 5 * <SHELL_PATH>
'5월' 3일 11시 01분에 실행
*을 설정할 경우, 매월 실행을 의미
※ 5번째
요일(day of week)을 의미, 무슨 요일에 실행 할 것인지 설정한다.
0 ~ 6 사이의 값을 설정 (0: 일요일, 6: 토요일)
ex) 1 11 3 * 3 <SHELL_PATH>
매달 3일 11시 01분 수요일에 실행
*을 설정할 경우, 매일 실행을 의미
3. crontab 예제
* * * * * | 매일 1분마다 실행 |
5 * * * * | 매일 매시간 05분에 실행 (1시간 간격으로 실행) |
*/5 * * * * | 매일 5분마다 실행 |
*/10 * * * * | 매일 10분마다 실행 |
0,10,20,30,40,50 * * * * | 매일 10분마다 실행 |
0 18 * * * | 매일 18시 00분에 실행 |
45 22 * * * | 매일 22시 45분에 실행 |
28 03 * * * | 매일 03시 28분에 실행 |
* 1 * * * | 매일 01시 00분 ~ 01시 59분 사이에 1분 간격으로 실행 |
0 */1 * * * | 매일 1시간 간격으로 실행 (매시간 00분) |
0 */12 * * * | 매일 12시간마다 실행 |
0 6,12 * * * | 매일 06시, 12시에 실행 |
10 2-5 * * * | 매일 02시 ~ 05시 사이 매시간 10분에 실행 (02시 10분, 03시 10분, 04시 10분, 05시 10분) |
5 8-20/3 * * * | 매일 08시 ~ 20시 사이 3시간 간격으로 05분에 실행 (08시 05분, 11시 05분, 14시 05분, 17시 05분, 20시 05분) |
42 4 10 * * | 매달 10일 04시 42분에 실행 |
30 5 1,15 * * | 매달 1일과 15일 05시 30분에 실행 |
0-10 17 1 * * | 매달 1일 17시 00분 ~ 17시 10분까지 1분 단위로 실행 |
0 17 * * 1 | 매주 월요일 17시 00분에 실행 |
0,10 17 * * 0,2,3 | 매주 일, 화, 수요일 17시 00분과 17시 10분에 실행 |
0 0 1,15 * 1 | 매달 1일과 15일 그리고 월요일 24시 00분에 실행 |
0 6,12 * * 0,3 | 수, 일요일마다 06시, 12시에 실행 |
0 21 * * 1-6 | 월 ~ 토 21시 00분에 실행 |
(cf) aws cron 표현식
규칙에 대한 예약 표현식 - Amazon CloudWatch Events
'#' 문자를 사용하는 경우 요일(day-of-week) 필드에 하나의 표현식만 정의할 수 있습니다. 예를 들어 "3#1,6#3"은(는) 두 개의 표현식으로 해석되기 때문에 유효하지 않습니다.
docs.aws.amazon.com
4. 등록된 crontab 목록 확인
$ crontab -l
5. crontab 등록 및 수정
(반드시 sh 파일은 +x 옵션이 있어야 실행 가능)
$ crontab -e
분(0-59) 시(0-23) 일(0-31) 월(1-12) 요일(0-7) 명령어
(요일에서 0, 7 : 일요일, 1:월, 2:화 ...)
주석은 #으로 하면 됩니다.
ex)
30 4,12 * * * /user/bin/run.sh > /user/bin/run-4:00-12:30.log 2>&1
(새벽 4시, 낮 12시 30분에 *일, *월, *요일에 /user/bin/run.sh를 실행시켜 run-4:00-12:30로그 저장해주세요.)
*/10 * * * * /user/bin/run.sh > /user/bin/run-10min.log 2 >&1
(10분마다 /user/bin/run.sh를 실행시켜 run-10min 로그 저장주세요.)
[특정 유저를 지정하여 실행할 경우]
* * * * * su - user1 -c /home/user1/test.sh 2>&1
(1분마다 user1이 test.sh 실행)
등록한 crontab 항목을 실행 하지 않기 위해서는 앞에 #을 붙여 주석 처리 해주면 됩니다. *은 모든 경우를 뜻합니다. /dev/null 2&1은 처리/에러 결과를 출력하지 않고 모두 버린다는 의미고, 만약, 처리/에러 결과를 보고 싶으면 /user/bin/run.sh > result.txt 하시면 됩니다.
crontab을 등록을 했다면 내가 등록한 쉘 명령어가 일정 주기에 따라 제대로 실행되는지 확인이 필요합니다. 확인하기 위해서는 리눅스에서 로그가 있는 경로의 cron을 보시면 됩니다. 그 외에 editor를 수정하거나 각종 crontab에 대한 설정을 변경하기 위해서는 아래와 같이 입력하시면 됩니다.
6. crontab 로그 확인
$ cat /var/log/cron
7. crontab 설정 확인
$ cat /var/spool/cron/root
'OS > Linux' 카테고리의 다른 글
[Shell Script] archive log 삭제 스크립트 (0) | 2024.11.15 |
---|---|
[SHELL] 쉘스크립트_sql문 실행 (0) | 2023.03.09 |
[SHELL] 쉘 스크립트_프로세스 상태 확인 (0) | 2023.03.09 |
[OS] 커널 부팅 순서 변경하기 (0) | 2023.02.13 |
[ETC] Samba 설치 및 Linux와 Window간 파일 공유하기 (0) | 2023.01.30 |