Language/Bash

리눅스 모니터링 스크립트

junsuyoun 2022. 11. 21. 15:02
728x90
반응형

리눅스 환경에서 아래 이미지와 같은 shell 스크립트를 통한 텍스트 모니터링 유틸리티를 만들어 보겠습니다.

ㅍㅍㅍ


스크립트 레이아웃

echo 명령를 통해 레이아웃을 구분할 수 있습니다.

[root@d86a1cc708f1 ~]# line="###############################################################"
[root@d86a1cc708f1 ~]# echo "$line"
###############################################################

[root@d86a1cc708f1 ~]# line="---------------------------------------------------------------"
[root@d86a1cc708f1 ~]# echo "$line"
---------------------------------------------------------------

[root@d86a1cc708f1 ~]# line="***************************************************************"
[root@d86a1cc708f1 ~]# echo "$line"
***************************************************************

좀 더 유연하게 만들고 싶다면, printf 명령어를 활용 합니다.

[root@d86a1cc708f1 ~]# line="###############################################################"
[root@d86a1cc708f1 ~]# printf %s"\n" $line
###############################################################

[root@d86a1cc708f1 ~]# line="---------------------------------------------------------------"
[root@d86a1cc708f1 ~]# printf "%s\n" $line
---------------------------------------------------------------

[root@d86a1cc708f1 ~]# printf "***************************************************************\n" $line
***************************************************************

 

스크립트 내용

고정 되는 값 표현 vs 변경 되는 값 표현

  • echo 명령어를 통해 문자열 출력은 "문자" - 쌍따옴표로 구분 (고정 되는 값)
  • echo 명령어를 통해 명령 결과 출력은 `명령어` - 으로 표현 (변경 되는 값)
[root@d86a1cc708f1 /]# echo "today - "`date`
today - Mon Sep 26 08:17:11 UTC 2022

[root@d86a1cc708f1 /]# echo "today - "`date`
today - Mon Sep 26 08:17:14 UTC 2022

[root@d86a1cc708f1 /]# echo "today - "`date`
today - Mon Sep 26 08:17:17 UTC 2022

간단한 예제

[root@d86a1cc708f1 mon_shell]# cat tistory.sh 
echo "################################################"
echo "today - "`date`
echo "################################################"

[root@d86a1cc708f1 mon_shell]# sh tistory.sh 
################################################
today - Mon Sep 26 08:18:47 UTC 2022
################################################

 

스크립트 실행

스크립트 결과를 어떻게 처리할꺼냐?

  • 실시간 화면 출력
  • 실시간 리다이렉션(로그 기록)

실시간 화면 출력

$ while true
do
<COMMAND>
clear
sleep 1
done

실시간 리다이렉션

$ while true
do
<COMMAND>
sleep 1
clear
done > <FILE NAME>


## 백그라운드 실행
$ while true
do
<COMMAND>
sleep 1
clear
done > <FILE NAME> &


## 터미널이 끊기더라도 백그라운드로 동작 시키기
$ nohup while true
do
<COMMAND>
sleep 1
clear
done > <FILE NAME> &

 

간단한 예제

특정 커맨드의 리소스 사용량을 화면에 실시간으로 출력하도록 하는 스크립트 작성

monitor_cmd=cub_server
monitor_interval=1

while true
do
	echo "TIME: "`date`
	echo "USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND"
	ps -aux |grep "$monitor_cmd" |grep -v grep
	sleep "$monitor_interval"
	clear
done

 

특정 커맨드의 리소스 사용량을 파일로 기록하고 파일로 확인하기

monitor_log="top_proc.log"
monitor_cmd=cub_server
monitor_interval=1

while true
do
	echo "TIME: "`date`
	echo "USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND"
	ps -aux |grep "$monitor_cmd" |grep -v grep
	sleep "$monitor_interval"
	clear
done > "$monitor_log" &


tail -f "$monitor_log"

 

728x90
반응형