리눅스

리눅스 (nohup 명령어 / 포트죽이기)

이째형 2021. 11. 8. 22:26

- nohup

aws를 이용해서 배포를 해보다가, nohup이라는 명령어를 알게 됬다.  nohup 명령어는 백그라운드 실행을 원할 때나,

표준 출력을 nohup.out으로 돌리기 위해서 사용한다.

 

사용방법 

  • nohup 실행파일
  • nohup 실행파일 & (백그라운드 실행)

 

2가지 형태로 사용할 수 있다. 

명령어의 뒤에 &를 입력하면 백그라운드에서 명령어가 실행되게 할 수 있다. 하지만 이렇게 수행했을 경우 사용자가 로그아웃 하면 프로그램이 종료되게 된다. 이 때 nohup 명령어를 같이 사용하면 사용자가 로그아웃해도 백그라운드에서 프로그램이 계속 돌아가게 된다.

 

nohup으로 백그라운드에서 동작하고 있는 프로그램을 중단시키려면 kill명령어를 사용해야 한다.


- 포트죽이기

종종 서버를 런 시키면 포트가 사용중이라는 에러가 나타날 때가 있는데, 이 때는 kill 명령어를 이용해서 포트를 죽이고 다시 서버를 런 시키면 에러가 해결된다.

 

먼저 사용중인 포트를 확인하기 위해서, netstat 명령어를 사용할 수 있다.

 

netstat(network statistics)

전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스, 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령어. 네트워크의 문제를 찾아내고 성능 측정으로서 네트워크 상의 트래픽의 양을 결정하기 위해 사용된다.

 

-a : 현재다른PC와 연결(Established)되어 있거나 대기(Listening)중인 모든 포트 번호를 확인

-r : 라우팅 테이블 확인 및 커넥션되어 있는 포트번호를 확인 

-n : 현재 다른PC와 연결되어 있는 포트번호를 확인

-e : 랜카드에서 송수한 패킷의 용량 및 종류를 확인 

-s : IP, ICMP, UDP프로토콜별의 상태 확인

-t : tcp protocol 

-u : udp protocol 

-p : 프로토콜 사용 Process ID 노출

-c : 1초 단위로 보여줌

 

netstat과, 리눅스에서 특정 문자열을 찾을 때 사용되는 grep 키워드를 이용해서 

netstat -nap|grep 8080

8080포트를 찾을 수 있다.

현재 listen상태인 8080포트를 

sudo kill $(sudo lsof -t -i:8080)

를 이용해서 죽이면

TIME_WAIT상태로 바뀐것을 확인할 수 있다.


 - deploy.sh 

#!/bin/bash

REPOSITORY=/home/ec2-user/app/git

cd $REPOSITORY/springboot-webservice/

echo "> Git Pull"

git pull

echo "> 프로젝트 Build 시작"

./gradlew build

echo "> Build 파일 복사"

cp ./build/libs/*.jar $REPOSITORY/

echo "> 현재 구동중인 애플리케이션 pid 확인"

CURRENT_PID=$(pgrep -f springboot-webservice)

echo "$CURRENT_PID"

if [ -z $CURRENT_PID ]; then
    echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다."
else
    echo "> kill -2 $CURRENT_PID"
    kill -9 $CURRENT_PID
    sleep 5
fi

echo "> 새 어플리케이션 배포"

JAR_NAME=$(ls $REPOSITORY/ |grep 'springboot-webservice' | tail -n 1)

echo "> JAR Name: $JAR_NAME"

nohup java -jar $REPOSITORY/$JAR_NAME &

위 쉘 스크립트가 배포를 위해 향로님 블로그에서 참고한 파일인데, 이를 보면 kill과 nohup명령어가 배포를 위한 스크립트를 만들 때 사용되는 것을 확인할 수 있다.

 

 

- 참고

https://jhhwang4195.tistory.com/182

https://blog.voidmainvoid.net/201

https://jojoldu.tistory.com/263?category=635883