[Linux] crontab을 알아보자
안녕하세요 ki입니다.
이번 Exp는 리눅스 크론탭(crontab)입니다.
솔루션 프로젝트에 참여했을 시기에 크론탭으로 일정시간마다 백업되는 부분을 개발한 적이 있습니다.
그럴 때 이용한 게 crontab이었습니다.
Crontab
크론탭(crontab)은 리눅스와 유닉스에서 사용하는 시스템 스케줄러입니다. 크론탭을 사용하면 특정 시간이나 주기에 스크립트, 명령어 또는 프로그램을 실행할 수 있습니다. 크론탭은 사용자별로 설정되며, 각 사용자는 자신의 크론탭을 관리할 수 있습니다. 크론탭에 추가된 작업은 특정 시간 또는 주기에 실행되며, 이를 통해 일상적인 관리 작업이나 자동화된 프로세스를 수행할 수 있습니다. 주로 백업 작업, 로그 파일의 정리, 시스템 모니터링, 자동화된 스크립트 실행 등과 같은 용도로 사용됩니다.
저의 경우는 DB Dump 용도로 사용하였습니다.
crontab 사용법
# 크론탭 편집
crontab -e
# 크론탭 표시
crontab -l
# 크론탭 삭제
crontab -r
# 크론탭 가져오기
crontab filename
# 크론탭 사용자변경
crontab -u username
기본 명령어는 위에 명령어입니다. '-e'명령어로 스케줄을 편집하고 vi편집기와 동일하게 :wq로 저장하고 종료합니다.
# 크론탭 주기 설정
# * * * * 파일이름 -> 분(0-59) / 시간(0-23) / 일(1-31) / 월(1-12) / 요일(0-6) 파일이름
# 요일에서 0과 7은 일요일입니다. ex) 0:일/1:월/2:화/3:수/4:목/5:금/6:토
# 예제
# 매분 test.sh 실행
* * * * * /home/script/test.sh
# 매주 금요일 오전 5시 45분에 test.sh 를 실행
45 5 * * 5 /home/script/test.sh
# 매일 매시간 0분, 20분, 40분에 test.sh 를 실행
0,20,40 * * * * /home/script/test.sh
# 매일 1시 0분부터 30분까지 매분 tesh.sh 를 실행
0-30 1 * * * /home/script/test.sh
# 매 10분마다 test.sh 를 실행
*/10 * * * * /home/script/test.sh
# 5일에서 6일까지 2시,3시,4시에 매 10분마다 test.sh 를 실행
*/10 2,3,4 5-6 * * /home/script/test.sh
저는 3번째 예제를 이해하지 못했던 기억이 있습니다.
주기설정에 분/시간/일/월/요일 ( * * * * *)은 띄어쓰기로 구분하는 걸 몰랐고 , (쉼표)로도 구분이 가능한 걸로 생각했었습니다. 크론탭은 띄어쓰기로 구분하니 기본적으로 알아야 하는 지식으로 생각해 주셔야 합니다.
그 외 사용법
# 크론탭 로깅
* * * * * /home/script/test.sh >> /home/script/test.sh.log 2>&1
# test.sh를 실행할때 마다 표시되는 출력을 test.sh.log에 파일에 추가합니다.
# 명령어에 '>>'은 출력을을 파일에 추가하고 이미 존재할 경우 끝에 내용을 추가하고
# '>'은 파일을 추가하고 이미 존재할 경우 파일을 덮어쓰는것을 의미합니다.
# 2>&1은 오류출력을 표준출력으로 변경하는 것을 의미합니다.
위에 명령어에 로깅 시에 2>&1은 오류 출력(2)을 표준 출력(1)으로 변경하는 것을 의미하는데요 리눅스와 유닉스 기반 시스템에서 사용되는 리다이렉션 기호입니다. 순서대로 표준 입력 (0), 표준 출력(1), 표준 오류 출력(2)을 의미합니다.
# 크론탭 백업
# 크론탭 내용을 crontab_bak.txt로 생성하는 명령어입니다.
crontab -l > /home/bak/crontab_bak.txt
# 스케줄을 이용
50 23 * * * crontab -l > /home/bak/crontab_bak.txt
배치와 크론탭 ( batch and crontab)
개발자로 일을 하면서 처음에는 배치와 크론탭의 같은 의미인지 몰랐었습니다.
처음으로 투입한 곳에서는 "크론탭 돌린다"로 다른 프로젝트에서는 "배치 돌린다"라고 불렀습니다.
또 다른 곳은 "스케줄러 등록 했냐 "라고 들었는데요
주기적으로 반복되는 작업을 예약하기 위해 사용되는 시스템 스케줄러
위에 말은 모두 같은 의미였고 왜 가는 곳마다 차이점이 있는지 궁금했었습니다.
crontab (크론탭) | batch (배치프로그램) | |
운영체제 | linux / unix | window |
구동 방식 | 주기적인 작업을 실행하기 위해 특정 시간 또는 날짜에 작업을 예약 | 배치 파일(.bat) 혹은 윈도우즈 태스크 스케줄러를 이용하여 실행 |
작업 설정 | 시간, 날짜 및 주기적인 규칙을 통해 작업을 정의 | 명령어 또는 프로그램의 실행 |
사용성 | CLI | GUI |
제가 생각한 명칭이 다른 이유는 프로젝트의 기반에 다른 것으로 판단하고 있습니다. 리눅스가 프로젝트와 솔루션에 기반이면 크론탭으로 부르고 윈도우기반이거나 스프링배치를 사용하는 경우에는 배치로 부르는 걸로 생각하고 회의 때나 요구사항 정의 시에 언어들을 파악하고 공통적 사용하려고 노력하고 있습니다.
참고