본문 바로가기
Old Posts/Linux

[Linux] crontab 명령어 사용법 - cron 작업 생성 및 관리

by A6K 2022. 3. 4.

crontab 명령은 리눅스에서 특정 작업을 주기적으로 실행하기 위해서 사용한다. crontab을 일종의 작업 스케쥴러로 "매일 1시에 이 작업을 실행하라” 혹은 “10분마다 이 스크립트를 실행하라” 같은 설정을 할 수 있다.

크론탭 기본 사용법

크론탭 명령은 몇 가지 옵션을 제공한다.

$ crontab -e

우선 -e 옵션을 사용하면 크론탭 설정을 할 수 있는 에디터 화면이 출력된다. 이 곳에 각종 크론탭 명령들을 입력하고, vi 에디터처럼 “:wq”를 입력해 저장하면 크론탭 작업이 갱신된다.

에디터 화면을 열지 않고 현재 크론탭 작업 목록을 확인만 하려면

$ crontab -l

-l 옵션을 이용하면되나. -l 옵션을 사용하면 파일의 내용을 cat 명령어로 화면에 출력하는 것처럼 크론탭의 작업 설정 내역을 화면에 뿌려준다.

만약 설정되어 있는 크론탭 작업들을 모두 지우고 싶다면

$ crontab -r

-r 옵션을 사용하면 설정되어있는 크론탭 작업들을 모두 제거하게 된다.

크론탭 작업

그러면 crontab 명령으로 설정할 수 있는 크론탭 작업에 대해 알아보자. crontab -e 명령으로 에디터 화면에 들어가면 크론탭 작업들을 설정할 수 있다.

크론탭 작업은 다음과 같이 생겼다.

* * * * * /home/test.sh

앞에 있는 5개의 * 문자는 각각 분, 시간, 일, 월, 요일을 나타낸다.

*         *        *       *        *
분(0-59)  시간(0-23)  일(1-31)  월(1-12)   요일(0-7)

그 다음에 지정한 주기마다 실행할 명령어 혹은 스크립트가 온다.

크론탭 작업의 예제는 다음과 같다. 대충 보고 응용해서 사용하면 된다.

# 매분 /home/test.sh 실행
* * * * * /home/test.sh

# 매주 일요일 오전 2시 00분에 /home/test.sh 실행
0 2 * * 0 /home/test.sh

# 매일 오전 2시, 오후 2시에 /home/test.sh 실행
0 2,14 * * * /home/test.sh

# 매 10분마다 /home/test.sh 실행
*/10 * * * * /home/test.sh

# 매일 자정 0분부터 30분까지 /home/test.sh 실행
0-30 * * * * /home/test.sh

위 예제에서 사용한 것처럼 # 문자로 시작하는 라인은 크론탭 작업이 아닌 주석으로 처리된다. 따라서 어떤 작업인지 크론탭 작업 위에 주석으로 설명해두면 나중에 알아보기 편하다.

크론탭 작업 로깅

크론탭 작업은 사용자의 터미널과 연관되어 있지 않다. 따라서 실행하는 명령어나 스크립트에서 생성한 화면 출력, 로그 등을 별도로 남겨야 한다. 그래야 작업이 성공했는지 실패했는지, 실패했으면 왜 실패했는지 나중에 확인할 수 있다.

크론탭 작업의 로그를 남기고 싶으면 다음과 같이 크론탭 작업을 설정하면 된다.

* * * * * /home/test.sh > /home/test.sh.log 2> /home/test.sh.err

test.sh 스크립트를 실행하면서 표준출력(Standard Out)으로 출력되는 내용은 test.sh.log 파일에 기록하고 표준에러(Standard Error)로 출력되는 내용은 test.sh.err 파일에 기록하라고 지정한 것이다.

표준출력과 표준에러의 내용을 하나의 파일에 기록하고 싶으면

* * * * * /home/test.sh > /home/test.sh.log 2>&1

이렇게 지정하면 된다.

문제는 이렇게 지정하면 매번 실행될 때마다 로그 파일이 새로 생성되고 기존의 로그들은 날라가게 된다. 기존 파일에 Append 하고 싶다면

* * * * * /home/test.sh >> /home/test.sh.log 2>&1

이런식으로 지정하면 된다.

크론탭 작업 백업

크론탭 작업의 수정은 버전관리가 안된다. 즉, 잘못 수정하거나 crontab -r 명령을 잘못 입력해서 다 날려버렸을 때, 복구하기가 힘들다. 어떤 작업이 있었는지 전부 기억하고 있지 않으면...

그럴 때를 대비해서 다음 명령을 크론탭 작업에 넣어두자.

0 0 * * * crontab -l > /home/crontab.bak

매일 자정에 크론탭 작업 내용을 crontab.bak 파일로 떨궈두는 명령이다. 이런걸 해두면 잘 못 수정했어도 그날 자정에 떨궈놓은 백업본이 남아있어 어렵지 않게 크론 작업을 복구할 수 있게 된다.

댓글