bash를 비롯한 Unix/Linux 셸 프로그램의 강력한 점 중 하나는 조건 분기, 명령 반복 실행, 새로운 함수 생성 등 일반적인 프로그래밍 구문을 폭넓게 지원한다는 것입니다. 여러 명령어를 셸 스크립트라 불리는 하나의 파일에 작성해 두면 한 번에 실행할 수 있습니다.
이는 시스템 관리를 위한 안정적이고 효율적인 수단이 됩니다. 매일의 백업, 시스템 업데이트 같은 반복 작업을 자동화하는 스크립트를 작성하거나, 자신만의 커스텀 명령어·유틸리티·도구를 만들 수도 있습니다. 나아가 서버에서 벌어지는 상황을 놓치지 않고 파악하는 데 도움이 되는 스크립트도 만들 수 있습니다.
서버의 핵심 구성 요소 중 하나는 바로 메모리(RAM)입니다. 메모리는 시스템 전체 성능에 지대한 영향을 미칩니다.
이 글에서는 서버 메모리가 부족해질 경우 하나 이상의 시스템 관리자에게 경고 이메일을 발송하는, 작지만 실용적인 셸 스크립트를 소개합니다.
이 스크립트는 특히 약 1GB(약 990MB) 수준으로 메모리가 적은 Linux VPS(가상 사설 서버)를 감시할 때 유용합니다.
테스트 환경
- mailx 유틸리티가 설치되어 있고 postfix 메일 서버가 정상 동작하는 CentOS/RHEL 7 운영 서버
alertmemory.sh 스크립트의 동작 방식은 다음과 같습니다. 먼저 가용 메모리 크기를 확인한 뒤, 그 값이 사전에 정한 기준값(이 가이드에서는 최소 허용 가용 메모리로 100MB를 사용)보다 작거나 같은지 판단합니다.
조건이 참이면 서버 RAM을 가장 많이 소비하는 상위 10개 프로세스 목록을 생성하고, 지정된 이메일 주소로 경고 메일을 발송합니다.
참고: 사용 중인 리눅스 배포판의 요구 사항에 맞게 스크립트를 일부 수정해야 할 수 있습니다(특히 메일 발송 유틸리티와 적절한 옵션 플래그).
서버 메모리 점검 셸 스크립트
#!/bin/bash
#######################################################################################
#Script Name :alertmemory.sh
#Description :서버 메모리 부족 시 경고 메일 발송
#Args :
#Author :Aaron Kili Kisinga
#Email :admin@wsxdn.com
#License : GNU GPL-3
#######################################################################################
## 메일 관련 변수 선언
## 이메일 제목
subject="Server Memory Status Alert"
## 발신자 주소
from="admin@wsxdn.com"
## 수신자 주소
to="admin@wsxdn.com"
## 참조(CC) 주소
also_to="admin@wsxdn.com"
## 전체 가용 메모리 크기를 MB 단위로 조회
free=$(free -mt | grep Total | awk '{print $4}')
## 가용 메모리가 100MB 이하인지 확인
if [[ "$free" -le 100 ]]; then
## 시스템 메모리를 많이 사용하는 프로세스를 임시 파일에 저장
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head >/tmp/top_proccesses_consuming_memory.txt
file=/tmp/top_proccesses_consuming_memory.txt
## 메모리가 부족하면 경고 이메일 발송
echo -e "Warning, server memory is running low!\n\nFree memory: $free MB" | mailx -a "$file" -s "$subject" -r "$from" -c "$to" "$also_to"
fi
exit 0
스크립트를 /etc/scripts/alertmemory.sh 경로에 생성한 뒤 실행 권한을 부여하고, cron.hourly에 심볼릭 링크를 걸어 줍니다.
# chmod +x /etc/scripts/alertmemory.sh # ln -s -t /etc/cron.hourly/alertmemory.sh /etc/scripts/alertmemory.sh
이렇게 하면 서버가 구동되는 동안 위 스크립트가 1시간마다 자동으로 실행됩니다.
팁: 스크립트가 의도대로 작동하는지 확인하려면 기준값을 평소보다 높게 설정해 이메일 발송을 쉽게 유도하고, 실행 주기를 약 5분 정도의 짧은 간격으로 지정해 보세요.
그다음 스크립트에 사용된 free 명령어를 명령줄에서 직접 실행하며 결과를 계속 확인합니다. 정상 작동이 확인되면 실제 사용할 값으로 되돌리면 됩니다.
아래는 샘플 경고 이메일 화면입니다.
이것으로 마무리합니다! 이 글에서는 서버 메모리(RAM)가 부족해질 때 시스템 관리자에게 경고 이메일을 발송하기 위해 셸 스크립트를 활용하는 방법을 살펴보았습니다. 이 주제에 대한 의견이 있다면 아래 피드백 양식을 통해 공유해 주세요.