리눅스 서버 상태를 한 번에 확인하는 통합 점검 스크립트
리눅스 서버를 운영하는 환경에서는 주기적인 상태 점검이 필수적입니다. 특히 다양한 서비스와 로그, 보안 설정까지 확인해야 할 항목이 많기 때문에 각각 수동으로 점검하기보다는 통합된 점검 스크립트를 활용하는 것이 효율적입니다.
이번 글에서는 CPU, 메모리, 디스크, 네트워크, 서비스 상태, 보안 설정 등 주요 항목 30가지를 자동으로 점검할 수 있는 Bash 스크립트를 소개합니다. 이 스크립트는 Rocky Linux, CentOS, Ubuntu 등 대부분의 배포판에서 사용할 수 있으며, 일상적인 점검을 자동화하는 데 유용합니다.
스크립트 개요
해당 스크립트는 30개의 점검 항목을 카테고리별로 구분해 출력하며, 결과를 보기 쉽게 정리합니다. 각 항목은 시스템 리소스, 서비스 상태, 보안 설정, 네트워크 연결 상태 등을 포함합니다. 스크립트는 별도의 설치 없이 기본 bash 환경에서 실행할 수 있습니다.
스크립트 내용
#!/bin/bash
echo "=============================================="
echo " 서버 점검 리포트 - $(date)"
echo "=============================================="
section() {
echo -e "\n\n========== [$1] ==========\n"
}
# CPU 및 메모리
section "CPU 사용률"
top -bn1 | grep "Cpu(s)"
section "메모리 사용률"
free -h
section "CPU 상위 프로세스"
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 11
# 디스크
section "디스크 사용량"
df -hT | grep -v tmpfs
section "디렉토리별 용량 (/var)"
du -sh /var/* 2>/dev/null
section "inode 사용량"
df -i
# 네트워크
section "네트워크 인터페이스"
ip a
section "Ping 테스트"
ping -c 4 8.8.8.8
section "열린 포트"
ss -tuln | grep -E ':80|:443'
section "네트워크 트래픽"
which sar &>/dev/null && sar -n DEV 1 3 || echo "sar 미설치"
# 로그
section "syslog"
tail -n 50 /var/log/messages 2>/dev/null
section "dmesg"
dmesg | tail -n 50
section "journalctl 에러"
journalctl -p err -n 20 2>/dev/null
# 서비스 상태
section "sshd 상태"
systemctl status sshd --no-pager
section "실행 중인 서비스"
systemctl list-units --type=service --state=running
section "실패한 서비스"
systemctl --failed
# 보안
section "현재 로그인 사용자"
who
section "최근 로그인 기록"
last -n 10
section "SSH 포트 설정"
grep ^Port /etc/ssh/sshd_config 2>/dev/null
section "root SSH 접근"
grep ^PermitRootLogin /etc/ssh/sshd_config 2>/dev/null
# 시스템 정보
section "커널 정보"
uname -a
section "OS 정보"
cat /etc/os-release
section "시간 동기화 상태"
timedatectl status
# 서비스 점검
section "Zabbix 서버"
pgrep -a zabbix_server || echo "Zabbix 실행 중 아님"
section "Nginx 상태"
systemctl status nginx --no-pager 2>/dev/null || echo "Nginx 없음"
section "Apache 상태"
systemctl status httpd --no-pager 2>/dev/null || echo "Apache 없음"
section "MySQL 상태"
systemctl status mysqld --no-pager 2>/dev/null || echo "MySQL 없음"
section "MySQL 연결 테스트"
mysqladmin ping -u root -p 2>/dev/null || echo "연결 실패"
# 기타
section "재부팅 시간"
who -b
section "자동 재부팅 확인"
crontab -l 2>/dev/null | grep reboot || echo "설정 없음"
echo -e "\n\n 점검 완료!"
사용 방법
스크립트를 파일로 저장한 후 실행 권한을 부여하면 됩니다. 예를 들어 아래와 같이 실행할 수 있습니다.
chmod +x server_check.sh
./server_check.sh
점검 결과는 항목별로 출력되며, 필요한 경우 crontab에 등록하여 정기 점검도 가능합니다. 특히 시스템 부하나 디스크 부족, SSH 설정 문제 등을 사전에 파악할 수 있어 장애 예방에 큰 도움이 됩니다.
리눅스 서버 관리에서 가장 중요한 것은 '예방'입니다. 문제 발생 이후 대응하는 것보다, 정기적인 점검을 통해 장애를 미연에 방지하는 것이 훨씬 효율적입니다. 본 스크립트를 활용하면 매일 혹은 매주 서버 상태를 손쉽게 점검하고 관리할 수 있습니다.
이 스크립트는 Zabbix, MySQL, Nginx 등 주요 서비스를 운영 중인 서버 환경에서도 바로 활용할 수 있도록 설계되었습니다. 시스템 관리자라면 이와 같은 자동화 도구를 적극 활용해 업무 효율을 높여보시기 바랍니다.