오늘은 제가 사용하게 되면서 알게된 리눅스 크론탭에 대해 알아보려 합니다.
윈도우에서는 스케줄러와 비슷한 것이라고 보면 되는데요.
특정 시간에 특정한 작업을 하고싶다.
위와 같은 목적으로 사용하실 분들에게 추천합니다.
크론탭 기본 사용 방법
일단 크론탭 기본 사용 방법에 대해 알아 볼까요? 리눅스 쉘에서 아래와 같이 입력해봅시다.
crontab -e
그러면 어떤 것을 편집할 수 있는 화면이 뜨게 됩니다. 여기에서 크론탭을 설정할 수 있는데요.
사용하시고자 하는 크론탭 명령어를 입력 후 :(콜론) 입력 후에 wq!를 입력해 크론탭을 갱신 할 수 있습니다.
그 다음에 해볼 명령어는
crontab -l
인데요. 이 명령어는 현재 크론탭에 어떤 명령어가 있는지 확인하는 명령어 입니다.
마치 cat 명령어로 파일을 읽은 것처럼 표준 출력으로 크론탭 내용이 나오게 됩니다.
그 다음 명령어는 크론탭 안에 있는 명령어 삭제 할 때 사용하는 명령어 입니다.
crontab -r
이제 크론탭 등록방법, 확인, 삭제 같은 기본 사용 방법에 대해 알아보았으니 간단한 크론 탭 하나 만들어보죠!
먼저 쉘에서 crontab -e 입력하여 크론탭 등록 화면에 들어가줍니다.
* * * * * ps -al
위와 같이 입력한 뒤 :(콜론) 입력 후에 wq!를 입력해 크론탭을 등록 해봅시다!
그러면 매분마다 ps -al명령어를 실행하게 될 것 입니다. 이것이 기본 사용 방법이지요.
참고로 이렇게 쉘스크립트로 등록하는 방법 외에도 커맨드로도 사용할 수 있습니다만, 이 글에서는 쉘 스크립트를 사용하는 방법으로 진행하도록 하겠습니다.
이번에는 아까 사용했던 명령어 중 '*'이 의미하는 것이 무엇인지 알아보고자 합니다.
*이 뭐죠?
* * * * *
분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)
'*'은 위와 같은 의미를 가지고 있습니다.
각 위치에 따라 실행 주기를 다르게 설정 할 수 있는데요. 순서대로 분-시간-일-월-요일 순이에요.
또한 각 숫자 범위안에서 '*' 대신 숫자를 입력하여 설정 할 수 있습니다. 참고로 요일 부분에서는 0이랑 7은 일요일이고,
1이 월요일로 시작하여 토요일인 6으로 끝이 납니다.
예제
매분 실행 시키기
# 매분 example.sh 실행
* * * * * /home/test/example.sh
특정 시간 실행 시키기
# 매주 월요일 오전 5시 45분에 example.sh 를 실행
45 5 * * 1 /home/test/example.sh
반복적으로 실행시키기
# 매일 매시간 0분, 10분, 30분에 example.sh 를 실행
0,10,30 * * * * /home/test/example.sh
범위를 두고 실행시키기
# 매일 3시 0분부터 50분까지 매분 example.sh 를 실행
0-50 3 * * * /home/test/example.sh
간격을 두고 실행시키기
# 매 35분마다 example.sh 를 실행
*/35 * * * * /home/test/example.sh
# 4일에서 5일까지 3시,4시,5시에 매 20분마다 example.sh 를 실행
*/20 3,4,5 4-5 * * /home/test/example.sh
이렇게 주기 입력 해줄 땐 *, -, / 기호를 사용하는 방법이 있습니다. 각각의 특수기호들이 하는 기능이 서로 다르고 이 조합들을 어떻게 하냐에 따라 입맛에 맞게 설정 할 수 있습니다.
추가 예제
* * * * * | 매일 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분에 실행 |
크론 사용 주의점.
크론 명령어를 사용할 때는 한 줄에 하나의 명령어만 사용해야 합니다.
# 잘못된 예
* * * * *
/home/test/example.sh
# 올바른 예
* * * * * /home/test/example.sh
주석은 '#'을 입력해서 사용하시면 됩니다.
# 주석 표시 #
#==============================#
# 주석은 이렇게 써요. #
#==============================#
크론 로깅 방법
크론탭을 정기적으로 사용하여 작업을 처리하는 것은 좋지만 해당 처리 내역에 대해 어떤 로그를 남겨야 할 때가 있습니다. 그럴 때 아래와 같이 사용하면 됩니다.
* * * * * /home/test/example.sh > /home/test/example.log 2>&1
위처럼 작성하면 매분마다 example.log 파일이 갱신 되어 작업 내용이 어떻게 처리 되었는지 알 수 있습니다.
만약 2>&1 을 제거하면 쉘스크립트에서 표준 출력 내용만 나옵니다.
특수 문자와 관련된 부분은 여기에서 참고하시기 바랍니다.
추가적으로 AWS에서 크론탭은 조금 다릅니다.
'Linux' 카테고리의 다른 글
[바미] 당일 최소값, 최댓값, 어제 발생한 로그 총 합 구하기. (0) | 2022.02.15 |
---|---|
[바미] 리눅스 특수 문자에 대해 알아봅시다. (0) | 2021.07.01 |
[바미] 특정 시간마다 내 서버의 상황을 log로 남겨보자! (0) | 2021.06.24 |
[바미] watch 명령을 이용하여 linux 시스템 모니터링하기. (0) | 2021.06.15 |
[바미] PS에 대해 알아보자! (0) | 2021.01.18 |