런타임노트

[Linux] jar 파일 실행하는 shell script 뜯어보며 작성하기 본문

Linux

[Linux] jar 파일 실행하는 shell script 뜯어보며 작성하기

D269 2023. 11. 9. 09:33
728x90

 

 

 

작성 목적 : 포트 80이 이미 사용되고 있으면 kill 하고 해당 jar 파일을 실행한다.

 

 

#!/bin/bash

# port 80 check
PORT=80
CHECK_PORT=$(sudo netstat -ntlp | grep :$PORT)

if [ -n "$CHECK_PORT" ]; then
        # killi80 port pid
        PID=$(echo "$CHECK_PORT" | awk 'NR==1 {print $7}' | gawk -F '/' '{print $1}')
        echo "Port $PORT is already in use. Killing process $PID"
        sudo -S kill -9 $PID

fi

# Jar file run
cd ~/wallet-view-2/target
nohup sudo java -jar app-0.0.1-SNAPSHOT.jar > log.out 2>&1 &

echo "wallet-view-2 started on port $PORT."

 

PORT=80

⇒ 변수 PORT는 80 이라고 선언

 

CHECK_PORT=$(sudo netstat -ntlp | grep :$PORT)

⇒ netstat -ntlp . 현재 시스템에서 열린 파일 및 네트워크 연결 정보 나열

이 명령어는 특정 포트를 사용 중인 프로세스나 파일을 찾는 데 자주 사용된다.

(주로 시스템 관리 및 디버깅 목적으로 활용)

 

 

if [ -n "$CHECK_PORT" ]; then

⇒ -n 옵션 : not null의 의미. 문자열이 비어 있지 않은 경우에 true 를 나타내는 조건문의 옵션

 

ex)

if [ -n "$변수나 명령" ]; then
    # 조건이 참일 때 실행할 명령
fi

⇒ $CHECK_PORT 부분이 비어있지 않은 경우 == 80번 포트를 사용 중인 프로세스들이 있는 경우

 

 

PID=$(echo "$CHECK_PORT" | awk 'NR==1 {print $7}' | gawk -F '/' '{print $1}')

⇒ echo "$CHECK_PORT" : CHECK_PORT 변수의 값들을 출력하라.

 

⇒ awk는 텍스트 데이터를 처리하고 보고서를 생성하기 위한 강력한 텍스트 처리 도구 및 프로그래밍 언어.

텍스트 파일이나 스트림의 각 줄을 읽고 원하는 패턴을 찾아 특정 작업을 수행하는 데에 활용됨.

 

ex) awk의 일반적 구조

awk '패턴 { 액션 }' 파일이름

awk는 패턴-액션 구조를 가지고 있다.

각 줄에 대해 패턴이 일치하면 해당 패턴에 대한 액션을 수행한다.

여기서 '패턴'은 일치시킬 패턴이며, '액션'은 해당 패턴이 일치할 때 수행할 명령 또는 작업입니다.

 

ex)

awk '/pattern/ { print $1 }' 파일이름

이 명령어는 'pattern'이라는 텍스트 패턴이 포함된 각 줄에서 첫 번째 필드를 출력

⇒ NR==1 는 첫 번째 줄 이라는 의미.

⇒ $7는 일곱 번째 필드 라는 의미

 

awk 'NR==1 {print $7}'

⇒ NR==1 패턴일 때 print $7 해라.

⇒ 첫번 째 줄에서 일곱 번째 필드를 출력해라

=> 출력하면 나는 12345/java 이런식으로 나옴 (pid번호/java)

그럼 뒤에 /java 문자열 자르기

gawk -F '/' '{print $1}'

 

 

 

> log.out

⇒ 표준 출력을 log.out 파일로 리다이렉션한다. == 프로그램이 표준 출력을 콘솔이 아니라 파일에 기록하도록 하는 것

 

2>&1

⇒ 표준 에러를 표준 출력으로 리다이렉션한다. == 표준 출력과 표준 에러를 동일한 파일에 기록하도록 하는 것.

728x90
반응형