개발/Shell Script

리눅스 사용중인 포트 번호 프로그램 PID 구해서 종료하는 스크립트.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
 
result_value=$(netstat -nap 2>/dev/null | grep 8083 | awk '{print $7}')
number_value=${#result_value}
 
if [ $number_value == 0 ]; then
     echo '해당포트가 미사용중으로 이미 종료되었습니다..'
else 
     echo '종료를 시작합니다.'  
     pid_val=${result_value%%'/'*}  
     kill -9 $pid_val
     if [ $? == 0 ]; then
    echo '정상종료'
     else
        echo '종료 실패'
    fi
fi
cs



음.... CentOS에서 데몬으로 FTP에 있는 문자 데이터를  DB에 데이터를 넣어 달라는 갑에 요청이 들어왔다....


데몬을 WAS로 만들어 달라는 요청이 들어와..  내장 톰캣을 Spring boot로 프로그램을 한번 짜봣다...


프로그램 완성은 얼마 안걸렸는데...  종료 스크립트 짜는게.. 더걸렸다 ㅋㅋㅋㅋ..;;


회사에 선배가 없어서.. 접근 방법을 잘몰라 인터넷을 통해 찾아 보면서 만들긴 해봤다..


갑님 께서는 리눅스를 모른다고..  JPS로 프로그램 간단히 종료가되는데.. .. 모르는 운영체를 왜 ㅜㅜ;; 선택했는지...


하여간..모른다고해서.. 종료 쉘도 만들어 보고싶고 갑님의 편의를 위해서 만들어 보았다.. 


나중에 다시 만들때 참고를 위해 해석한번 해보장


1.3번째 줄에 result_val 변수에 담긴 값을 순차적으로 보면


1). netstat라는 명령어 현재 사용중인 포트를 보여주는 명령어 이다. (나도 명령어를 통해 종료하는 프로그램 함짜봐야지... )


2). 옵션에 -nap라고 준것은 n은 도메인 주소를 읽어들이지 않고 숫자로 출력하는 옵션이다. a는 목록 모든 소켓을 보기 l은 여기 안넣었는데 l은 리스닝중인것 (사용중인것만) 이며 p는 pid아이디를 보여주라는 옵션이다.


3). 2>/dev/null 이 옵션은 2번에 P라는 Pid 옵션을 주면 권한이 없다는 경고에 메시지인데 혹시나 데이터 꼬일 방지를 위해서 제거해 놨음..

root권한으로 할거라면 필요는 없을듯.


4). grep 8083은 lol에 블리츠크랭크 그랩이 생각난다.. 끌어오는 기술인데.. 의미가 같다.. 말그대로 8083포트만 쏙 끌어오는 것이다.


5).awk '{print $7}' 이건 PID 번호만 쏙가지고 $7은 배열? 7번째에 있는 데이터를 가져와라 이런 의미인데 "pid/java" 이런식으로 예(18132/java) 이런값으로 데이터가 나온다


2. 4번째 줄 number_value=${#result_value} 이건 3번째 result_value 변수에 담긴 길이값을 number_value에 넣으라는 의미이다.



3. if [ $number_value == 0 ]; then 그냥 if문인데 숫자비교할때 -eq 쓰면 에러나더라.. 프로그래밍처럼 == 이걸로 해야된다 문법은 띄어쓰기 포함해서 왼쪽 처럼 써야된다.