Linux Crontab 사용법
- 이번 포스트에서는 리눅스 크론탭에 대해 알아볼 것이다.
- 윈도우에서는 스케줄러와 비슷하다고 생각하면 된다.
crontab 기본명령어
- 명령어 위치 : /usr/bin/crontab
- ps -ef|grep crond
- crond 실행되고 있는지 확인
- crontab -e
- 크론탭 에디터 실행
- 여기에서 크론탭 설정, 수정
- 편집하려면 root 권한 필요(root권한 없다면, sudo crontab -e)
- crontab -l
- 등록되어 있는 crontab 목록 출력
- crontab -r
- 등록한 crontab 모두 삭제
- crontab -v
- 수정한 크론탭 파일 내용 조회(일부 시스템에서만 사용 가능)
- 사용자가 등록한 crontab은 [리눅스 : /var/spool/cron/사용자명]에 저장됨
등록형식
* * * * *
(왼쪽부터 분, 시, 일, 월, 요일)
- 1번째 * : 분 (0 - 59)
- 2번째 * : 시 (0 - 23)
- 3번째 * : 일 (1 - 31)
- 4번째 * : 월 (1 - 12)
- 5번째 * : 요일 (0 - 6) (0:일요일, 1:월요일, 2:화요일, …, 6:토요일)
예시
1) * * * * *
/home/script/test.sh
- 매 1분마다 /root/test.sh를 수행(하루에 1440회)
2) 15, 45 * * * *
/home/script/test.sh
- 매시 15분, 45분에 /home/script/test.sh를 수행(하루에 48회)
3) *
/10 * * * *
/home/script/test.sh
- 10분마다 /home/script/test.sh를 수행(하루에 144회)
4) 0 2 * * *
/home/script/test.sh
- 매일 02:00에 /home/script/test.sh를 수행 (하루에 1회)
5) 30 *
/6 * * *
/home/script/test.sh
- 매 6시간마다 30분에 수행(00:30, 06:30, 12:30, 18:30)
6) 30 1-23/6 * * *
/home/script/test.sh
- 1시부터 매 6시간마다 30분에 수행(01:30, 07:30, 13:30, 19:30)
7) 0 8 * *
1-5 /home/script/test.sh
- 평일(월요일~금요일) 08:00에 수행
8) 0 8 * *
0,6 /home/script/test.sh
- 주말(일요일, 토요일) 08:00에 수행
크론탭 백업
- 주기적으로 크론탭 백업 필요
- crontab -l > /home/bak/crontab_bak.txt
- 크론탭 내용을 txt 파일로 만들어 저장해둔다.
- 매일 오후 10시 30분에 크론탭 백업
- 30 22 * crontab -l > /home/bak/crontab_bak.txt
작업에 대한 로그 남기는 방법
- cron job들은 자동 수행되므로, 별도 작업 로그를 남기지 않으면 해당 작업의 정상 수행 여부 확인이 어렵다.
- cron job 수행 여부 자체는 시스템 로그에 남기 때문에(ubuntu의 경우 /var/log/syslog 파일에서 확인) 볼 수 있으나,
- 실제 해당 job이 실행되면서 job에 발생시키는 로그는 추가 기록이 필요하다.
- cron job 등록 시, 아래 명령어 사용하면 로그 파일 남길 수 있다.
1
0 0 * * * /some/job > ~/log/job_`date +\%Y\%m\%d\%H\%M\%S`.log 2>&1
로그파일의 파일 이름에 실행된 날짜/시간 넣는 방법
- data 명령어 이용 시 지정한 포메터대로 현재 시간 출력 가능
- 쉘 스크립트에서 문자를 이용하여
명령어
를 감싸면 해당 명령어의 stdout 을 return해주는데 이를 이용하여 파일이름을 정해줄 수 있다. - 로그 파일명을 다음과 같이 지정한 경우 job_
date+\%Y\%m\%d\%H\%M\%S
.log 실제 파일명은 job_20190623201123.log와 같이 시간값으로 치환되어 결정된다.
/some/job 의 출력(stdout)을 로그 파일로 리디렉션
- 리디렉션 기호인 > 를 이용하여 stdout을 파일로 기록하려면 다음과 같이 하면 된다.
해당 로그 파일에 overwrite를 하고 싶다면,
1
/some/job > ~/log/job_`date+\%Y\%m\%d\%H\%M\%S`.log
해당 로그파일의 기존 내용을 보존하면서 append를 하고 싶다면,
1
/some/job >> ~/log/job_`date+\%Y\%m\%d\%H\%M\%S`.log
/dev/null 의 의미
- 위에서 알아본 것과 반대로 작업 로그가 필요 없다고 생각되는 경우는 /dev/null로 redirect를 해주면 된다.
- /dev/null로 들어오는 입력은 모두 버려진다.
마지막 2>&1 의 의미
- 1 : stdout
- 2 : stderr
>
: redirection- 2>&1 : stderr를 stdout으로 리디렉션해서 stdout과 동일하게 처리
Posted