영원히 남는 기록, 재밌게 쓰자

프로젝트 배포 해보기 (5) 서버 스크립트 생성해서 백그라운드로 서버 실행하기 본문

인프라

프로젝트 배포 해보기 (5) 서버 스크립트 생성해서 백그라운드로 서버 실행하기

youngjae-kim 2024. 5. 17. 17:17
728x90
반응형

이전 글에서 인스턴스 서버를 로컬의 mysql 워크벤치와 연동하여 접속하는 것 까지 해보았다.

 

https://happy-youngjae.tistory.com/51

 

프로젝트 배포해보기 (4) aws 인스턴스(우분투 서버)의 계정 로컬의 MySQL Workbench 연동해보기

배포 이후 db를 다룰 일이 있을 때 마다 계속 SSH 접속을 하고 우분투 서버의 DB로 접속을 계속 한다면 조금 귀찮거나 힘들 수 있다.그래서 로컬 컴퓨터 즉, 자신의 컴퓨터에서 우분투 서버의 사용

happy-youngjae.tistory.com

 

이번 글에서는 서버 스크립트 이용해서 서버를 백그라운드로 실행하여 프로그램이나 프로세스가 현재 프로세스 즉, 터미널 창을 닫더라도 서버 프로세스가 실행 되도록 설정해줄 수 있다.

 

프로젝트 시작 스크립트와 중단 스크립트를 만들고 적용을 해보았다.

 

스크립트 생성 후 설정

프로젝트 디렉토리로 이동 후

 

1) nano 편집기를 사용하여 스크립트 파일 생성

nano start.sh

 

1-1) 스크립트에 다음 내용 입력

#!/bin/bash

JAR=studentmanage-0.0.1-SNAPSHOT.jar
LOG=/home/ubuntu/timenglish/timenglish.log

nohup java -jar $JAR > $LOG 2>&1 &
  • nohup는 프로세스를 실행한 터미널의 연결이 끊어지더라도 프로세스가 지속적으로 동작할 수 있게 해주는 명령어.
  • java –jar $JAR는 JAR 변수에 저장된 JAR 파일을 실행하라는 명령어.
  • > $LOG는 자바로 실행된 프로세스의 출력을 로그 파일에 저장하라는 의미이다. 
  • 2>&1은 오류 출력(stderr)을 일반 출력(stdout)으로 전달하라는 의미이다. 따라서 일반 로그와 오류 로그가 모두 timenglish.log 파일에 저장될 것이다. 그리고 마지막의 & 기호는 백그라운드로 명령을 실행하라는 의미이다.
    • 오류 출력을 지정하지 않으면 오류의 내용이 timenglish.log 파일에 저장되지 않는다.
<ctrl+o>를 누른 후, 화면 아래에 ‘File Name to Write: ’이라는 프롬프트가 등장하면 enter를 눌러 start.sh 파일을 저장.
그다음 <ctrl+x>를 눌러서 편집기를 종료.

 

2) 실행권한 부여하기

chmod +x start.sh

위 권한 설정을 하면 ./start.sh 만 입력해도 실행될 수 있도록 실행권한을 부여

 

 

3) 중지 스크립트 생성

nano stop.sh

 

3-1) 중지 스크립트 내용 입력

#!/bin/bash

TIMENGLISH_PID=$(ps -ef | grep java | grep studentmanage | awk '{print $2}')

if [ -z "$TIMENGLISH_PID" ];
then
    echo "TIMENGLISH is not running"
else
    kill -9 $TIMENGLISH_PID
    echo "TIMENGLISH stopped."
fi

TIMENGLISH_PID 라는 변수에 등호 오른쪽 결과를 할당한다.

  • ps -ef : 현재 실행 중인 프로세스 출력
  • grep java, grep studentmanage : 파이프라인 옵션으로 프로세스에 해당 내용이 포함된 프로세스를 필터링하는 역할
  • awk '{print $2}' : 출력 문자열의 2번째 항목인 PID만 뽑아서 출력한다는 의미

4) 실행권한 부여하기

chmod +x stop.sh

시작 스크립트와 동일하게 권한을 부여해준다.

 

결과

 

정상적으로 잘 동작하고 종료되는 것을 확인할 수 있었다.

 

스크립트를 활용해서 백그라운드로 설정하는 방법을 경험할 수 있는 좋은 시간이었다.

728x90
반응형