반응형
요즘은 배치솔루션이 많아 사용이 줄고 있지만 여전히 리눅스의 cron을 활용하는 경우가 많습니다. cron은 꼭 배치를 위한 것은 아니지만 스케줄 역할을 하며 주로 배치 등록 및 실행에 주로 쓰입니다. 리눅스 환경에서 배치 실행을 위해 crontab 설정 방법에 대해 알아보겠습니다.
크론(Cron) 과 크론탭(Crontab) 차이
Cron은 정해진 스케줄에 따라 작업을 수행하는 데몬.
Crontab은 데몬이 바라보는 작업 리스트 입니다.
보통 cron과 crontab을 구분하지 않고 쓰긴 하지만
배치를 만들건데 리눅스의 Cron을 활용하면 되고, Shell 파일 만들어서 Crontab에 등록해야 합니다.
와 같이 쓰는 것이 정확합니다.
Crontab 기본 형태
분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-7) /경로/파일.sh
요일의 경우 일(0,7), 월(1), 화(2), 수(3), 목(4), 금(5), 토(6)
* 스프링 크론과는 설정방법이 다르니 주의하세요.
Crontab 설정
1) 조회
crontab -l
위 코드 입력 시 등록된 작업 리스트가 조회됩니다.
2) 등록, 수정
crontab -e
위 코드 입력 시 vi 모드로 진입합니다.
i를 눌러 수정 모드로 진입하고, :wq로 저장하거나 :q로 그냥 빠져나옵니다.
* 등록 예제는 아래 참고
3) 삭제 (주의)
crontab -r
특정 명령만 지우는 게 아니라 등록된 crontab 자체가 지워져 모두 날아갈 수 있으니 주의해야 합니다.
Crontab 등록 예제
1) 매분/30초마다 실행
// 매분
* * * * * /test/batch.sh
// 30초마다
* * * * * /test/batch.sh & sleep 30;/test/batch.sh
2) 특정 시간 실행
// 매일 3시 30분 실행
30 3 * * * /test/batch.sh
// 일요일 3시 30분 실행
30 3 * * 0 /test/batch.sh
3) 반복 실행
// 30분 마다 실행
*/30 * * * * /test/batch.sh
// 0분, 30분 마다 실행
0,30 * * * * /test/batch.sh
// 매시 0분부터 30분까지 실행
0-30 * * * * /test/batch.sh
4) 로그(log)
* * * * * /test/batch.sh > /log/testBatch.log 2>&1
5) 주의사항
// crontab 명령어는 무조건 한줄로 작성, 아래의 경우 error
* * * * *
/test/batch.sh
// 주석은 #
#* * * * * /test/batch.sh
.sh 파일에서 java 호출 예시
#!/bin/sh
#batch.sh
#----------------------------------------
# 실행명령 설정
#----------------------------------------
export LANG=ko_KR.eucKR
export HOME_DIR=/app/batch
export LOG_DIR=$HOME_DIR/log
DAY=`date '+%Y-%m-%d'`
#----------------------------------------
# JDK 디렉토리 경로 설정
#----------------------------------------
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
export CLASSPATH=$HOME_DIR
export CLASSPATH=$CLASSPATH:.:./:$HOME_DIR/bin
export CLASSPATH=$CLASSPATH:$HOME_DIR/lib/ojdbc14.jar
$JAVA_HOME/bin/java -classpath $CLASSPATH kr.co.test.testBatch.java $1 $2
echo $LOG_DIR/testBatch$DAY.LOG
그리드형
'IT > Linux' 카테고리의 다른 글
[LINUX] 리눅스 SFTP 파일 업로드/다운로드 (0) | 2021.12.28 |
---|---|
[LINUX] 리눅스 Alias 등록 및 조회 (tail -f log 등록) (0) | 2021.12.24 |
[LINUX] 리눅스 chage 명령어 패스워드 만료기간 변경(You must wait longer to change your password) (0) | 2021.12.16 |
[Linux] 리눅스 mkdir 명령어 - 폴더 만들기, 폴더 생성하기 (1) | 2021.12.06 |
[Linux] 리눅스 명령어 ps (프로세스 확인 방법) (0) | 2021.12.03 |
댓글