mandatory의 마지막 파트라고 할 수 있는 부분이다.
서버의 상태를 작성하는 쉘 스크립트를 만들고, 이를 10분에 한 번씩 띄워줘야 한다.
작업 예약 스케쥴러
cron
- 특정한 시간에 or 특정 시간마다 어떤 작업을 자동으로 수행하게 하는 명령어
- cron 프로세스는
/etc/crontab파일에 설정된 것을 읽어 작업을 수행
설정하기
다음 명령어를 가지고 crontab을 편집할 수 있는 에디터를 열 수 있다.
에디터가 없다고 나온다면 그냥 1번 누르고 엔터 치자.
bash
sudo crontab -u root -e
-u옵션은 해당 사용자의 crontab을 설정하도록 지정함.root는 해당 사용자를 지정합니다.-e옵션은 crontab을 수정하기 위한 에디터를 열도록 지정합니다.
# m h dom mon dow command 이라고 적혀 있는 부분 밑에 다음과 같이 적는다.
bash
------------------------------------
*/10 * * * * sh /path/to/script
상태 표시기 만들기
요구사항
monitoring.sh를 만들어보자. 요구사항은 다음과 같다.
- 운영체제의 아키텍쳐와 커널 버전
- 실제 프로세서의 갯수
- 가상 프로세서의 갯수
- 서버에서 현재 사용 가능한 RAM 및 사용률(백분율)
- 서버에서 현재 사용 가능한 메모리 및 사용률(백분율)
- 현재 cpu의 사용률
- 마지막 재부팅 시간과 날짜
- LVM의 활성 여부
- 연결된 네트워크 수
- 서버를 쓰는 사용자 수
- ipv4와 mac 주소
- sudo로 실행되는 command 갯수
설계하기
bash
# 운영체제의 아키텍쳐와 커널 버전
uname -a
- 명령어
uname: 시스템 정보 출력 - 옵션
-a: all의 줄임말.
bash
# 실제 프로세서의 갯수
grep "physical id" /proc/cpuinfo | sort | uniq | wc -l
# 가상 프로세서의 갯수
grep "^processor" /proc/cpuinfo | wc -l
- 프로세서에 관한 정보는
/proc/cpuinfo에 있다. - physical id 뒤에 실제 프로세서의 갯수가 나온다.
- 정렬하고, 중복된 것을 없앤 다음, 갯수를 센다.
- processor 뒤에 가상 프로세서의 갯수가 나온다.
- 갯수를 센다.
bash
# 서버에서 현재 사용 가능한 RAM 및 사용률(백분율)
free -m | awk '$1 == "Mem:" { print $2 }'
free -m | awk '$1 == "Mem:" { print $3 }'
free -m | awk '$1 == "Mem:" { printf("%.2f\n"), $3/$2*100 }'
- RAM에 관한 부분은 명령어
free를 입력하면 나온다. - 옵션
-m을 이용하면 단위를mb로 바꿀 수 있다
bash
# 서버에서 현재 사용 가능한 메모리 및 사용률(백분율)
df -Bg | grep '^/dev/' | grep -v '/boots$' | awk '{ft += $2} END {print ft}'
df -Bm | grep '^/dev/' | grep -v '/boots$' | awk '{ut += $3} END {print ut}'
df -Bm | grep '^/dev/' | grep -v '/boots$' | awk '{t += $2}{ut += $3} END {printf(%d), ut/ft*100}'
df: 리눅스 시스템 전체의 (마운트 된) 디스크 사용량을 확인.- 파일시스템, 디스크 크기, 사용량, 여유공간, 사용률, 마운트지점 순으로 표기
-B: 지정한 크기(SIZE)를 블록단위로 정하여 용량 표시하는 옵션-g: 단위를 GB로-m: 단위를 MB로
bash
# cpu 실행률
mpstat | grep 'all' | awk '{ print 100 - $12 }'
mpstat: 사용가능한 CPU와 Core 별 사용량을 출력하는 명령어- 미리
sysstat을 설치해야 한다.
bash
# 마지막 재부팅 시간과 날짜
who -b | awk '$1 == "system" { printf("%s %s\n", $3, $4) }'
who: 호스트에 로그인한 사용자 정보 출력-b: 마지막 시스템 부팅 시간을 출력하는 옵션
bash
# LVM의 활성 여부
lsblk | grep "lvm" | wc -l | awk '{ if ($1 > 0) print "yes"; else print "no"}'
lsblk: 리눅스 디바이스 정보를 출력하는 명령어
bash
# 활성 연결 수
ss -t | grep ESTAB | wc -l
ss: 소켓 상태를 조회할 수 있는 유틸리티로netstat과 비슷한 역할을 수행한다.
bash
# 서버를 사용하는 사용자 수
users | wc -w
- users : 사용자
bash
# 서버의 IPv4 주소와 MAC 주소
hostname -I
ip addr | sed -n '8p' | awk '{print $2}'
hostname: 시스템 이름을 확인하고 설정하는 명령어I: 호스트의 IP 주소를 출력하는 옵션
ip: iproroute2 패키지의 일부로, 주소와 경로를 할당하고, ARP 캐시를 관리하는 등 다양한 용도로 제공.
bash
# sudo 프로그램으로 실행된 명령의 수
journalctl _COMM=sudo | grep COMMAND | wc -l
-
journalctl:systemd의 서비스 로그를 확인할 수 있으며,systemd-journald.service에의해서
systemd의 정보들을 분석한다. -
•
_COMM=sudo: 특정로그(sudo) 보기
명령어: wall
wall이란?
모든 터미널로 메세지를 보내는 명령어
사용법
- 단순히 wall만 입력하면 입력모드가 됨. 입력 후
Ctrl + D를 누르면 전송 - wall 명령어 바로 뒤에 써서 메시지를 보낼 수도 있음.
- wall을 통해 터미널에게 작업을 시킬 수도 있음.
bash
wall $(ls -al)
완성코드
펼쳐보기
bash
arc=$(uname -a)
physical=$(grep "physical id" /proc/cpuinfo | sort | uniq | wc -l)
wall "#architecture: $arc
#physical cpu : $physical
#virtual cpu :
#
#
"