2026年01月20日/ 浏览 10

运维工程师的日常总是充满各种重复性工作,特别是服务器巡检这个看似简单却又极其重要的任务。每次手动检查系统状态、服务运行情况、磁盘空间等指标,不仅耗时耗力,还容易遗漏关键信息。今天我们就来聊聊如何用Bash脚本实现CentOS Stream9系统的自动化巡检。
传统的手动巡检方式已经跟不上现代运维的需求了。想象一下,面对几十上百台服务器,手动登录每台机器执行命令,不仅效率低下,还容易出错。Bash脚本作为Linux系统的原生工具,无需额外安装任何软件,就能实现强大的自动化功能。
CentOS Stream9作为RHEL的前沿版本,更需要我们保持高度警惕。系统稳定性、安全性、性能表现都需要定期检查。而一个精心编写的Bash脚本,可以在几分钟内完成原本需要数小时的手动工作。
完整的系统巡检应该覆盖哪些方面?我们不妨从这几个关键指标入手:
系统基础信息检查是第一步。包括主机名、系统版本、内核版本、启动时间等。这些信息看似简单,但在故障排查时往往能提供重要线索。uname -a和uptime命令的组合就能获取大部分基础信息。
内存使用情况直接关系到系统性能。free -m命令可以显示内存总量、已用量和空闲量。但更专业的做法是计算内存使用率,并设置告警阈值。当内存使用超过90%时,脚本应该发出明确警告。
磁盘空间检查尤为重要。df -h命令能显示各分区使用情况,但我们需要更智能的判断逻辑。比如对根分区设置80%的告警线,对其他数据分区设置90%的告警线。
让我们动手写一个实用的巡检脚本。首先创建一个新文件,比如system_check.sh,并添加执行权限。脚本开头别忘了加上#!/bin/bash的shebang声明。
系统信息收集部分可以这样写:
echo "===== 系统基础信息 =====" echo "主机名: $(hostname)" echo "系统版本: $(cat /etc/redhat-release)" echo "内核版本: $(uname -r)" echo "系统运行时间: $(uptime | awk {print $3,$4} | sed s/,//)"内存检查部分需要更细致的处理:
mem_total=$(free -m | awk /Mem:/ {print $2}) mem_used=$(free -m | awk /Mem:/ {print $3}) mem_free=$(free -m | awk /Mem:/ {print $4}) mem_usage=$(echo "scale=2; $mem_used/$mem_total*100" | bc) echo "===== 内存使用情况 =====" echo "总内存: ${mem_total}MB" echo "已用内存: ${mem_used}MB" echo "空闲内存: ${mem_free}MB" echo "内存使用率: ${mem_usage}%" if [ $(echo "$mem_usage > 90" | bc) -eq 1 ]; then echo "警告:内存使用率超过90%!" fi基础巡检功能完成后,我们可以考虑添加更专业的日志记录和告警通知功能。将每次巡检结果保存到日志文件,方便后续分析和趋势观察。
LOG_FILE="/var/log/system_check.log" { echo "===== 巡检时间: $(date) ====="} >> $LOG_FILE
对于关键告警,可以通过邮件通知管理员。前提是系统已经配置好邮件发送功能: ```bash if [ $(echo "$mem_usage > 90" | bc) -eq 1 ]; then echo "警告:内存使用率超过90%!" | mail -s "内存告警 $(hostname)" admin@example.com fi最后一步是设置cron定时任务,让脚本定期自动执行。比如每天凌晨3点执行一次完整巡检:
0 3 * * * /root/scripts/system_check.sh对于特别重要的服务器,可以考虑增加巡检频率,比如每小时检查一次关键指标。但要注意避免过度检查对系统性能造成影响。
虽然Bash脚本强大易用,但在实际部署时仍需注意安全性问题。巡检脚本通常会包含敏感信息,因此要确保脚本文件权限设置合理:
chmod 700 system_check.sh chown root:root system_check.sh如果脚本中包含密码等敏感信息,建议使用加密方式存储,或者改用更安全的认证方式如SSH密钥。
运维自动化不是一蹴而就的过程,而是需要不断优化完善的长期工作。今天的Bash巡检脚本只是一个起点,你可以根据实际需求添加更多检查项,比如网络连接数、特定服务状态、安全补丁情况等。记住,好的运维工具应该像瑞士军刀一样,功能丰富又简单易用。