[Linux] lsof 안될 때 포트 찾아 웹 서버 종료하기 Shell Script

 

해당 코드가 필요한 상황

웹 서버 프로세스의 pid 를 찾아 종료해야할 때

잠깐?! 일하고 있는 곳에서 서버를 restart 해야하는 상황이 생겼다.(필자의 환경은 전자정부프레임워크 & tomcat 기반) 단순히 tomcat/bin 에 들어가 ./shutdown.sh 와 ./startup.sh 를 실행시키려 했지만 문제가 발생하였다. ./shutdown.sh 로 일부 프로세스는 종료되어있는데 일부 프로세스는 종료되지 않아 ./startup.sh 도 되지 않는 것이다. 꺼지지도 않고 켜지지도 않는... 그런 슬픈 상황이 발생하였다. 더 큰 문제는 포트를 찾으려고하는데 lsof 도 되지 않고 netstat 는 아주 일부 기능만 제공되는 것이였다. 해당 서버는 폐쇄망이라 새로운 것을 설치하기에는 불가능했다... 

그렇다면 lsof 를 사용하지 않고도 웹 서버의 pid 를 찾아서 kill 을 하는 방법 밖에 없어 구글링을 한 결과 답변자 방향으로 절을 세 번 올릴만한 내용을 찾았다. 참고 

필자의 경우는 일부 포트를 찾기 보다 열려있는 포트 중에서 java 관련있는 부분을 모두 kill -9 으로 종료해주었다.

스크립트 코드는 아래와 같다.

pfiles /proc/* 2>/dev/null | nawk -v port=$port '
/^[0-9]/ { cmd=$0; type="unknown"; continue }
$1 == "SOCK_STREAM" { type="tcp" }
$1 == "SOCK_DGRAM" { type="udp" }
$2 == "AF_INET" { if((port!="")&&($5!=port)) continue;
if(cmd!="") { printf("%s\n %s:%s/%s\n",cmd,$3,$5,type); cmd="" }
else { printf(" %s:%s/%s\n",cmd,$3,$5,type); }}'


kill -9 PID

댓글

이 블로그의 인기 게시물

[INTELLIJ] 인텔리제이 폴더 안 보이고 파일만 보이는 버그 해결 방법

[생활] 짝눈(부동시)로 신체검사 4급(공익) 받은 방법.

[스프링부트] @Mapper import 실패시(빨간줄) 해결 방법