Linux) JSP를 실행하는 스케줄링

이상진·2022년 7월 5일
0
post-thumbnail

서버에서 jsp를 실행?

새로운 서비스를 개발하다가
JSP로 개발해야하는 상황에서
Crontab을 이용해서 매일 프로그램을 실행해줘야하는 상황이었다.

검색을 해보니
jsp를 실행하는 방법은 없고
.sh파일을 실행해주는 cron스케줄링이 많았다.

sh파일이란

여기서 sh파일은
쉘 스크립트를 의미하는데,
쉘 스크립트는 간단히 Unix커맨드등을 나열해서 실행하는 것이다.

sh파일은 보통
#!/bin/sh 로 시작한다.
리눅스에서 저렇게 시작하는 파일을 실행해주게 할 수 있다.

예를 들면...
sh파일의 경우 tset.sh가 있다고 가정 했을때 간단히 ./test.sh하면 실행된다.

그런데 나는 프로젝트에서 JSP로 작성하고 그 JSP 파일을 매일 실행해줘야 했다.
./test.jsp 암만해도 내가 원하는 결과가 나오진 않았다.

기존의 코드는 이미 작성되었고 서버에서 매일 실행해주기만 하면 되는 상황(jsp를 이용해서 특정 DB를 조회하고 삽입하는 코드를 만들어놓은 상태였기 때문에 내가 원하는 시점에 쿼리를 실행해야했다.) 어떻게 할까 고민하다가 찾은 해답은 curl을 이용해서
지정한 시간에 crontab을 이용해서 curl로 jsp를 실행하는 것이었다.

리눅스 서버에서 url에 접속하려면 curl커맨드를 이용하는데
이것을 이용해서 jsp링크를 curl로 접속하는 커맨드를 crontab을 통해서 돌려주기로 했다.

먼저 간단한 명령어를 알아보자.

Crontab 명령어

crontab -l

등록된 crontab이 있다면 목록을 보여주고
없다면 없다고 나온다.

crontab -e
(제거는 crontab -r)

이 명령어를 통해 crontab을 작성할 수 있다.

작성할때는 규칙이 있는데 살펴보면...

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

이런식으로 원하는 시간설정이 가능하다
예를 들어 매일 0시에 프로그램을 실행하고 싶다면

0 0 * * * /usr/local/실행할파일명.sh

이런식으로 작성하면 된다.

그런데 나는 Jsp를 실행해주기 위해서
curl을 이용해서 정한시간에 url로 jsp를 이용해서 DB작업을 하는게 목적이므로 원하는 시간 뒤에 curl을 이용해서 url을 입력해준다.

curl 사용하기

먼저 curl의 기본 사용법은

curl [옵션] <접속하고싶은 URL>

이다.

옵션에는 결과를 저장해주는 -o를 이용하면
원하는 파일이름으로 url결과를 저장해줄수있고,
-O 대문자 O를 이용하면 원래파일 이름 그대로 저장할 수도 있다.

다운중에 연결이 끊기면 -C를 이용해서 다시 받을 수 있다.

-l 옵션을 이용하면 리소스의 헤더만 가져올 수 있다.

등등 다양한 옵션을 이용할 수 있지만 여기까지만 알아보겠다.

내가 필요한 건 그냥 url접속해서 jsp를 실행만 해주면 되기 때문에
간단하게 옵션없이 사용하여 적용하였다.

최종코드는...

0 0 * * * curl "url/파일명.jsp"

이렇게 최종적으로 작성하였고
원하던 대로 쿼리가 지정된 시간에 실행되는것을 확인하였다.

Issue

중간에 문제가 하나 있었는데 Cron이 돌지 않고 있어서 확인해보았다.
처음엔 cron을 가동을 안해서 그런줄 알고 실행해줬다.

sudo service cron start
(중지는 service cron stop, 재시작은 service cron restart이다.)

그래도 되지 않아서

service cron status //Cron 상태확인

위 명령어를상태를 확인해보니

MTA installed, discarding output

이렇게 뜨는것을 보고 검색해보니
Postfix가 설치되지 않아서 그렇다고 한다.

postfix를 설치해주자

sudo apt-get install postfix

그런데 나는 여기서도 에러가 났다.
그 이유는 apt를 업그레이드를 안해줘서 그렇다.

업그레이드도 해주자.

sudo apt-get update

그러고나니 crontab이 정상작동하는 것을 확인했다.

profile
Back-end Engineer

0개의 댓글