본문으로 바로가기

[Linux] 서버 상태 확인 스크립트

category OS/Linux 2021. 9. 21. 18:39

목차

    1. 소스 생성

     스크립트 파일 내용은 아래에 다음과 같습니다.

     간단하게 CPU, Memory, Disk 사용량을 로그 형태의 파일로 저장합니다.

    10초 주기로 서버의 상태를 확인합니다.

    #!/bin/sh
    
    function cpuCheck() {
    	#CPU
    	cpu_usage=`top -b -n1 | grep -Po '[0-9.]+ id' | awk '{print 100-$1}'`
    
    	#CPU 소수점반올림
    	cpu_usage=$(printf %.0f $cpu_usage)
    
    	#string to int cast
    	((cpu_usage=${cpu_usage}*1))
    
    	if [ $cpu_usage -ge 90 ]
    	then
    		echo -n " [CPU($cpu_usage)% - 심각]" >> $today
    	elif [ $cpu_usage -ge 70 ]
    	then
    		echo -n " [CPU($cpu_usage)% - 주의]" >> $today
    	else
    		echo -n " [CPU($cpu_usage)% - 양호]" >> $today
    	fi
    }
    
    function memoryCheck() {
    
    	memory_total=`free | grep ^Mem | awk '{print $2}'`
    	memory_used=`free | grep ^Mem | awk '{print $3}'`
    	memory_percent=$((100*$memory_used/$memory_total))
    	
    	if [ $memory_percent -ge 90 ]
    	then
    		echo -n " [Memory($memory_percent)% - 심각]" >> $today
    	elif [ $memory_percent -ge 70 ]
    	then
    		echo -n " [Memory($memory_percent)% - 주의]" >> $today
    	else
    		echo -n " [Memory($memory_percent)% - 양호]" >> $today
    	fi
    }
    
    function diskCheck() {
    
    	disk_total=`df -P | grep -v ^Filesystem | awk '{sum += $2} END { print sum; }'`
    	disk_used=`df -P | grep -v ^Filesystem | awk '{sum += $3} END { print sum; }'`
    	disk_percent=$((100*$disk_used/$disk_total))
    
    	if [ $disk_percent -ge 90 ]
    	then
    		echo -n " [Disk($disk_percent)% - 심각=]" >> $today
    	elif [ $disk_percent -ge 70 ]
    	then
    		echo -n " [Disk($disk_percent)% - 주의]" >> $today
    	else
    		echo -n " [Disk($disk_percent)% - 양호]" >> $today
    	fi
    }
    
    while true; do
    	today=$(date "+%Y-%m-%d").txt #날짜로 파일명 생성
    	today_format=$(date)- #로그를 위한 데이트 형태
    	
    	echo -n $today_format >> $today
    	cpuCheck
    	memoryCheck	
    	diskCheck
    	echo "" >> $today
    	echo "" >> $today
    	
    	sleep 10 #10초 주기
    done
    [1. touch로 파일 생성]
    # touch server_check.sh
    
    [2. vi, vim 편집기를 이용하여 스크립트 파일 붙여넣기]
    # vi server_check.sh
    
    [3. 실행 가능한 권한 부여]
    # chmod +x server_check.sh

    2. 실행

     스크립트를 백그라운드로 실행해줍니다.

    [터미널이 종료 되면 같이 종료가 됨]
    # sh server_check.sh &
    
    [터미널이 종료 되어도 유지를 위한 실행]
    # nohup sh server_check.sh &
    
    [
      nohup.out 파일을 생성하지 않으려면 다음과 같이 실행해 줍니다.
      1>/dev/null : 표준 출력을 사용하지 않겠다
      2>&1 : 표준 에러를 표준 출력과 같게 만듬
    ]
    # nohup sh server_check.sh 1>/dev/null 2>&1 &
    [실행을 성공한 경우 오늘 날짜로 파일이 생성 됩니다.]
    # ls
    2021-09-21.txt  server_check.sh
    
    [실시간 확인하기]
    # tail -f 2021-09-21.txt
    2021. 09. 21. (화) 18:35:03 KST- [CPU(16)% - 양호] [Memory(34)% - 양호] [Disk(9)% - 양호]
    
    2021. 09. 21. (화) 18:35:13 KST- [CPU(9)% - 양호] [Memory(34)% - 양호] [Disk(9)% - 양호]
    
    2021. 09. 21. (화) 18:35:23 KST- [CPU(5)% - 양호] [Memory(34)% - 양호] [Disk(9)% - 양호]
    
    2021. 09. 21. (화) 18:35:34 KST- [CPU(6)% - 양호] [Memory(34)% - 양호] [Disk(9)% - 양호]
    
    2021. 09. 21. (화) 18:35:44 KST- [CPU(11)% - 양호] [Memory(34)% - 양호] [Disk(9)% - 양호]
    ( ... ) 생략

    3. 종료

    ps, kill 명령어를 이용해 종료해줍니다.

    [PID를 찾아서 종료하기]
    # ps -ef | grep server_check.sh | grep -v grep
    root      3092 15023  0 18:34 pts/1    00:00:00 sh server_check.sh
    
    # kill -9 3092
    
    [실행 명령어를 찾아서 종료하기]
    # kill -9 `ps -f | grep server_check.sh | grep -v grep | awk '{print $2}'`
    
    [1]+  죽었음               nohup sh server_check.sh > /dev/null 2>&1