출처 - http://blog.naver.com/wjddyddn17?Redirect=Log&logNo=140149618411
*crontab
- 주기적이고 반복적인 특정 작업을 일정 기간 마다 실행 하도록 설정(scheduler와 비슷)
*crontab 명령어
#crontab -l : crontab table내용을 보여준다.
#crontab -r : crontab file을 지운다.
#crontab -e : crontab table의 내용을 수정한다.
※ crontab 의 내용을 수정할 때 crontab -e로 직접 수정을 할 수도 있고
crontab -l > mycrontabfile 처럼 파일로 받아서 수정한 다음
crontab mycrontabfile로 submit시켜서 수정,실행시킬 수도 있다
*crontab 등록 방법
-> * * * * * 실행할 파일(경로포함)
1) * (분) : 0-59, * (모든분)
2) * (시) : 0-23, * (모든시)
3) * (일) : 1-31, * (모든일)
4) * (월) : 1-12, * (모든월)
5) * (요일): 0-6 (일요일 ~ 금요일)
ex)
30 2 15,28 * * 명령
- 15일,28일 새벽 2시 30분 매번 명령 실행
5 6 */5 * * 명령
- 매월 편집일로부터 5일마다 6시 5분에 실행
5 6 1-10 * * 명령
- 매월 1일 ~10일 동안 6시 5분에 명령 실행
5 6 1,10 * * 명령
- 매월 1일과 10일 6시 5분에 명령 실행
0,15,30,45 8-17 * * 1-5
00,10,20,30,40,50 3,4,5 * * * /anylink/CMS/shl/recv_EB22.sh >> recv_EB22_susin.log
00,10,20,30,40,50 3,4,5 * * * /anylink/CMS/shl/recv_EB22.sh
00 3 * * * /anylink/CMS/shl/recv_EB22.sh
00 03 * * * /anylink/CMS/shl/recv_EB22.sh >> recv_EB22_susin.log
00,10,20,30,40,50 3,4,5,6,7 * * * /anylink/CMS/shl/recv_EB22.sh
>> /anylink/CMS/logs/crontablogs/recv_EB22_susin.log
00,10,20,30,40,50 9-13 * * 1,2,3,4,5 /anylink/CMS/shl/send_EB13_SEND_R.sh >> /anylink/CMS/logs/crontablogs/send_EB13_SEND_R.log
*crontab으로 자바파일 실행할때!!
터미널에서 crontab을 등록한다. (터미널이 열려있는상태에서)
crontab에 등록된 시간에 정상적으로 작동하여 쉘파일을 실행한다.
만약 쉘파일에 자바프로그램을 실행한다면 정상적으로 실행한다.
하지만 터미널이 닫친 상태에서 crontab이 실행되고 쉘파일의 자바프로그램을
실행한다면 자바를 실행할수 없다는 에러가 발생한다.(에러는 mail에서 확인가능)
에러발생 이유 >
터미널이 열리면 .profile 실행이되고 profile에 등록된 JAVA_HOME의 PATH로
자바의 위치를 알수있다. 그러므로 실행이 가능하다.
하지만 터미널을 닫고 실행이 됬을때는 $HOME의 위치는 알수있지만 JAVA의 경로는
알지 못하므로 실행하지 못한다.
대처방법으로 >
쉘파일에 . $HOME/.profile을 추가해준다. 이렇게 되면 쉘파일을 실행했을때
.profile을 실행하게 된다.
// JAVA_HOME=/usr/java14_64;export JAVA_HOME
출처 - http://blog.naver.com/cestlavie_01?Redirect=Log&logNo=40202377268
윈도우에 schtasks 명령어가 있다면 리눅스에는 crontab이 있다.
두 명령어 모두 OS에서 관리를 하는 데몬을 통해서 설정한 일정 주기마다 반복적으로 프로세스를 수행할 수 있게 해주는 편리한 툴이다.
# vim /etc/crontab 을 열어서 어떤식으로 사용하는지 확인해 보자.
시간을 지정하는 분은 다음과 같이 정의 되어 있다.
1. 분 - 범위 : 0-59
2. 시 - 범위 : 0-23 (자정이 0)
3. 일 - 범위 : 1-31
4. 달 - 범위 : 1-12 또는 jan,feb, mar, apr ... 축약형 영문 월 표시
5. 요일 - 범위 : 0-6 (일요일은 0 또는 7) 또는 sun, mon, tue, wed thu, fri, sat
범위 지정에 사용할 수 있는 연산자
1. *
해당 범위 모두 수행하게 된다.
예를 들어 매분 마다 실행되게 하고 싶다. -> * * * * *
매 시간 정각에 실행되게 하고 싶다. -> 0 * * * *
매 일 오전 03시에 실행되게 하고 싶다 -> 0 3 * * *
매 달 25일 자정에 실행되게 하고 싶다 -> 0 0 25 * *
매 해 1월 1일 오후 2시에 실행되게 하고 싶다 -> 0 14 1 1 *
매 주 화요일 오전 03시 30분에 실행되게 하고 싶다. -> 30 3 * * 2
2. -
해당 구간은 모두 수행하게 된다.
문서 인쇄를 할 때 2페이지부터 7페이지까지만 인쇄하고 싶을 때 2-7을 사용하는 것과 같은 원리로 사용할 수 있다.
매 시간 10분에서 30분까지 매 분마다 실행되게 하고 싶다 -> 10-30 * * * *
오후 7시에서 11시까지 매 시간마다 실행되게 하고 싶다 -> 0 7-11 * * *
매 월 20일에서 28일까지 자정에 실행되게 하고 싶다 -> 0 0 20-28 * *
매 해 3월에서 6월까지 1일 오전 03시 30분에 실행되게 하고 싶다 -> 30 3 1 3-6 *
평일 오전 03시에만 실행되게 하고 싶다 -> 0 3 * * 1-5
3. ,
특정 시간대에만 수행하게 된다.
10분, 30분 -> 10, 30 * * * *
오전 4시 오후 4시 정각 -> 0 4, 16 * * *
매 월 1일 15일 자정 -> 0 0 1, 15 * *
매 년 5월 11월 1일 정오 -> 0 12 1 5,11 *
월, 수, 금 오후 2시 30분 -> 30 2 * * 2,4,6
4. /
주기적으로 호출한다.
*/5 * * * * -> 매 시간 5분 마다 실행
0 */2 * * * -> 매 2시간마다 정각에 실행
실제로 만들어 보자!!
1. crontab에 사용 할 테스트 파일들 생성.
구조는 간단하다.
실행파일 test를 호출하는 test.sh
실행파일 test1을 호출하는 test1.sh
각각 호출하는 구현은 아래와 같이 되어 있다.
하나 추가 된 점은 cobus계정의 .bash_profile 파일에서 환경변수로 COBUS_ROOT를 설정해 주었고 이를 인식하기 위해 쉘 스크립트에서 source 명령어로 OS에 등록을 임시적으로 하여 사용할 수 있다는 것도 테스트 한다.
2. crontab에 등록해보자.
일단 cron 데몬이 커널에 올라가 있는지 확인해보자.
ps -ef | grep cron
아래 처럼 실행이 되고 있다. 만약 실행되지 않는다면 /etc/init.d/crond start 하면된다.
crontab -l 로 리스트를 확인하고
crontab -e 로 vi 처럼 입력하면 된다.
입력을 마치고 wq로 저장 종료 후
/etc/init.d/crond restart 로 재실행하면 등록 끝!
3. 테이터가 잘 생겼나??
test.log 2분마다 호출이 되었고 $COBUS_ROOT도 잘 인식하고 있음을 확인 할 수 있다.
4. crontab 수정 및 변경하기
이쯤 되면 감을 잡았을 것이다. 그냥 crontab -l 로 확인해서 수정 또는 삭제할 내용을 crontab -e로 열어 편집해주면 그만.
더 자세한 내용을 알고 싶다면?
http://blog.naver.com/PostView.nhn?blogId=won92h&logNo=140127216008
2013. 12. 10 추가
linux의 crontab은 기본적으로 분 단위까지 지원한다. 그럼 30초마다 실행시키고 싶을 때는 어떻게 해야 할까?
위처럼 실행할 프로세스를 입력하고 모두 매분 호출하게 한다. 그리고 딜레이를 주고 싶은 초만큼 sleep을 주면
결과 화면처럼 30초마다 수행할 수 있게 된다.
'개발 > 기타' 카테고리의 다른 글
이클립스에서 C/C++ 프로그램 작성하기 (0) | 2015.09.16 |
---|---|
jQuery : 플러그인 개발 (0) | 2014.07.01 |
아파치 톰캣 mod_jk 설치 (0) | 2014.02.27 |
MQTT(mosquitto) - Mosquitto Broker 설치 (0) | 2014.02.25 |
MariaDB(마리아DB) 설치 (0) | 2014.02.24 |
댓글