less than 1 minute read

스프링 부트등을 실행가능한 jar로 만들고 서비스를 등록할 경우가 생긴다. 이때 jar를 실행한 스크립트를 만들고 사용하는 경우가 있는데 해당 스크립트를 서비스에 등록하도록 한다.

1. 실행 스크립트 작성(start.sh)

test.jar를 실행시키는 스크립트

PID_FILE_NAME=test.pid
JAVA_OPT="-Xms1024m -Xmx2048m"
JAVA_OPT="$JAVA_OPT -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector"
SERVICE_NAME=test.jar
PROFILE=dev

echo "Starting $SERVICE_NAME...."
sleep 2
if [ ! -f $PID_FILE_NAME ]; then
    java -jar $JAVA_OPT -Dspring.profiles.active=$PROFILE $SERVICE_NAME >> /dev/null & echo $! > $PID_FILE_NAME
    echo "$SERVICE_NAME started..."
else
    echo "$SERVICE_NAME is already running..."
fi

2. 중지 스크립트 작성(stop.sh)

test.jar를 중지시키는 스크립트

#!/bin/sh

PID_FILE_NAME=kte-api.pid
JAVA_OPT="-Xms1024m -Xmx2048m"
SERVICE_NAME=kte-api.jar
PROFILE=prod

if [ -f $PID_FILE_NAME ]; then
    PID=$(cat $PID_FILE_NAME);
    echo "$SERVICE_NAME stoping..."
    sleep 2
    kill -9 $PID
    echo "$SERVICE_NAME stoped..."
    rm $PID_FILE_NAME
else
    echo "$SERVICE_NAME is not running..."
fi

3. 서비스 작성

서비스를 작성한다.

sudo vi /etc/systemd/system/test.service
[Unit]
Description=TEST

[Service]
Type=forking
User=ec2-user
Group=ec2-user
ExecStart=/home/ec2-user/test/start.sh
ExecStop=/home/ec2-user/test/stop.sh
WorkingDirectory=/home/ec2-user/test

[Install]
WantedBy=multi-user.target

만약 jar파일을 직접 실행한다면 type=simple로 처리하는데 위 스크립트등으로 pid를 처리한다면 forking으로 해주어야 정상가동된다.

4. 서비스 등록

sudo chmod +x /etc/systemd/system/kte-admin.service
sudo systemctl daemon-reload
sudo systemctl enable test.service
sudo systemctl start test.service

서비스상태를 확인하고 싶으면

sudo systemctl status test.service

종료를 하고 싶다면

sudo systemctl stop test.service

이렇게 하면 리눅스등이 재부팅될때 자동 실행하게 처리한다.

Tags:

Categories:

Updated: