최근 진행하던 프로젝트에서 기존에는 최초 실행시에 한번 실행하는
로직이 존재했는데 요구사항이 변경됨에 따라 주기적으로 실행해줘야하는 일이 생겼다
여기서 크론이라는 개념이 떠올라서 적용하는김에 내용을 정리하게 되었다
"특정 시간에 특정 작업을 해야한다"
라고 한다면 리눅스에서 크론탭을 사용하면 된다
스프링 스케줄러에 cron과 같다고 보면될것 같다
1. 기본 사용방법
1) 크론탭 설정하기
$ crontab -e
해당 명령어 입력시 vi로 편집하듯 편집하는 화면이 보인다
vi와 동일하게 원하는 설정을 한 뒤 :wq 를 통해 저장한다
만약 저장하지 않으려면 :q 로 나오면 된다
2) 크론탭 내용보기
$ crontab -l
해당 명령어는 cat 으로 파일을 읽은거 처럼 크론탭의 내용이 출력된다
3) 크론탭 지우기
$ crontab -r
해당 명령어 입력시 크론탭이 삭제 된다
2. 주기 설정
* * * * *
분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)
* 표시가 5개가 있는데 앞에서 부터 분-시간-일-월-요일 순이다
그리고 괄호 안의 숫자 범위 내로 별 대신 입력 할 수 있다
요일에서 0과 7은 일요일이다 즉, 1부터 월요일 6은 토요일이 된다
3. 주기별 예제
1) 매분 test.sh 실행
# 매분 test.sh 실행
* * * * * /home/script/test.sh
2) 특정 시간 test.sh 실행
# 매주 금요일 오전 5시 45분에 test.sh 를 실행
45 5 * * 5 /home/script/test.sh
3) 특정 시간 test.sh 반복 실행
# 매일 매시간 0분, 20분, 40분에 test.sh 를 실행
0,20,40 * * * * /home/script/test.sh
4) 특정 범위 동안 test.sh 실행
# 매일 1시 0분부터 30분까지 매분 tesh.sh 를 실행
0-30 1 * * * /home/script/test.sh
5) 특정 간격 마다 test.sh 실행
# 매 10분마다 test.sh 를 실행
*/10 * * * * /home/script/test.sh
6) 복잡하게 응용해보기
# 5일에서 6일까지 2시,3시,4시에 매 10분마다 test.sh 를 실행
*/10 2,3,4 5-6 * * /home/script/test.sh
주기 입력 방법엔 * , - / 을 이용하는 방법이 있다
특수기호가 하는 기능이 다르고 조합을 어떻게 하느냐에 따라 입맛대로 주기를 설정 할 수 있다
4. 크론 사용시 주의사항 밑 팁
1) 한 줄에 하나의 명령어를 써야한다
잘못된 예시
# 잘못된 예
* * * 5 5
/home/script/test.sh
올바른 예시
# 잘된 예
* * * 5 5 /home/script/test.sh
2) 주석달기
# 을 입력해서 그 뒤로 나오는 모든 문자를 주석할 수 있다
# 주석 #
#--------------------#
# 이것은 주석입니다. #
#--------------------#
5. 크론 로깅
이건 리눅스에서 쉘스크립트를 사용할때 사용하는 방법 연장이라고 보면된다
쉘스크립트가 실행될때 로그 파일을 만들어주는 것이다
여기에 크론이 추가되었다고 보면 된다
1)
- 매 1분마다 test.sh 실행하는데 실행 마다 test.sh.log 라는 파일 생성
해당 파일에 test.sh로 실행된 내용이 저장된다
- 꺽세 > 가 1개이면 실행마다 파일을 덮어씌우기 한다는 뜻
- 2>&1 뜻은 2는 표준 에러의 파일 디스크립터, 1은 표준 출력의 파일 디스크립터 인데
"표준 에러를 표준 출력으로 리다이렉트하라" 라는 뜻이라고 보면 된다
* * * * * /home/script/test.sh > /home/script/test.sh.log 2>&1
2)
- 위와 동일한데 꺽세 >> 두개인게 다르다
두개면 덮어씌우기가 아닌 마지막 저장된거 뒤에 이어서 추가되는것이다
* * * * * /home/script/test.sh >> /home/script/test.sh.log 2>&1
6. 크론탭 백업
혹시 crontab -r 로 크론탭 디렉토리를 날려버리는걸 방지해서
아래와 같은 명령어로 크론탭 내용을 저장해 둘 수 있다
crontab -l > /home/bak/crontab_bak.txt
해당 명령어를 자동화(자동저장) 하게 하려면 아래와 같이 하면 된다
50 23 * * * crontab -l > /home/bak/crontab_bak.txt
이럴 경우 매일 오후 11시 50분에 백업을 해준다는 뜻이다
'DevOps' 카테고리의 다른 글
| [DevOps] 도커 이미지 생성 및 온프레미스 환경 jar 띄우기 (0) | 2024.09.04 |
|---|---|
| [DevOps] Curl (Client URL) (0) | 2024.07.30 |
| [DevOps] Elastic Alert (0) | 2023.12.15 |
| [DevOps] Grafana Alert (0) | 2023.12.05 |
| [DevOps] 도커 네트워크 종류 (0) | 2023.07.19 |