본문 바로가기
Linux

Linux 크론탭을 이용하여 Java 연동 방법

by GoodDayDeveloper 2024. 11. 13.
반응형

 

 

Scheduler란 특정한 시간에 등록된 작업을 자동으로 실행시키는 것을 말합니다.

 

프로그램 특성상 스케줄러 기능은 많이 사용되게 되는데 많은 방식이 있지만 

리눅스에서 크론탭(crontab)을 이용하여 서비스할 수가 있습니다.

 

리눅스 크론탭(crontab)은 대부분의 리눅스 환경에서 기본적으로 설치되어 있습니다.

 

알아두면 굉장히 편리한 기능이고 리눅스 운영체제에서 제공하기 때문에

언어에 얽매이지 않고 자유롭게 연동이 가능하다는게 장점입니다.

 

 

저는 리눅스의 크론탭을 이용하여 자바를 실행하는 과정을 정리해보았습니다.

 

 

 

 

Linux 크론탭을 이용하여 자바 연동 방법 

 

 

 

 

 

리눅스의 크론탭과 자바를 연동하려면 크게 3가지로 나뉘게 됩니다.

 

1. 리눅스 sh 파일 생성 및 설정

2. 리눅스 crontab 설정

3. 자바 URL 생성

 

 

순서대로 정리해보겠습니다.

 

 

리눅스 sh 파일 생성 및 설정

 

 

 

 

우선 원하는 위치에 sh 파일을 만들어줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 첫 번째 URL을 요청하는 코드
curl -X GET "http://localhost/test.do?code=test_1"
 
# 첫 번째 요청이 성공하면 두 번째 URL을 요청
if [ $? -eq 0 ]; then
  curl -X GET "http://localhost/test.do?code=test_2"
 
  # 두 번째 요청의 성공 여부를 로그에 기록
  if [ $? -ne 0 ]; then
    echo "$(date): localhost request for code=test_2 failed" >> /root/cronError1.log
  fi
else
  # 첫 번째 요청이 실패한 경우 로그에 기록
  echo "$(date): localhost request for code=test_1 failed" >> /root/cronError2.log
fi
cs

 

 

이 스크립트는 curl 명령어를 사용하여 두 개의 GET 요청을 수행하고

각 요청의 성공 여부를 확인하여 로그 파일에 기록합니다.

 

if [ $? -eq 0 ]; then 이 부분에서 $?는 마지막으로 실행된 명령어의 종료 상태를 나타내고 

-eq 0은 종료 상태가 0(성공)인지를 확인합니다.

 

if [ $? -ne 0 ]; then 이 부분에서는 두 번째 요청의 종료 상태가 0이 아닌 경우(-ne 0) 

실패로 간주하고 로그 파일에 실패 메시지를 기록합니다.

 

 

여기서는 두 가지 URL을 전송하도록 설정하였지만 각자 기호에 맞게 사용하시면 됩니다.

 

 

 

 

리눅스 crontab 설정

 


두번째는 어떠한 파일을 실행하고 언제 실행이 되는지 crontab에서 설정하는 부분입니다.

 

crontab 경로는 etc에 존재합니다.

 

 

crontab에 있는 설명입니다. 

자리마다 친절하게 설명되어 있어서 어렵지 않게 설정할 수 있습니다.

 

 

1
0 8 * * * root /bin/sh /root/cronTest.sh >> /root/cronError.log
cs

 

 

저는 설명 밑에 위의 코드를 넣어주었습니다.

 

위 명령어는 매일 오전 8시에 root 사용자가 /bin/sh를 사용하여 /root/cronTest.sh 스크립트를 실행하고,

그 실행 결과를 /root/erpCron.log 파일에 기록하라는 명령어입니다.

 

 

시간을 설정하였으니 자바에서 URL을 받고 실행될 메서드만 생성해주면 됩니다.

 

 

 

 

자바 URL 생성

 

1
2
3
4
5
6
7
8
@RequestMapping(value = "/test.do")
public void test() throws Exception {
    try {
        System.out.println("test");
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}
cs

 

 

URL 매핑을 통해서 메서드가 실행을 할 수가 있습니다.

 

 

 

 

반응형

댓글