当前位置:首页 > 服务器技术 > 正文

守护你的服务器(手把手教你编写Linux Shell监控脚本)

在现代IT运维中,Linux Shell脚本是每个系统管理员和开发人员必须掌握的技能之一。通过编写简单的脚本,我们可以实现对服务器状态的自动监控,及时发现问题并发出警报。本文将从零开始,教你如何编写一个实用的系统监控脚本,即使是完全的小白也能轻松上手!

为什么需要监控脚本?

服务器一旦出现CPU过载、内存不足或磁盘空间告急等问题,若不能及时发现,可能导致服务中断甚至数据丢失。手动检查既费时又容易遗漏,而一个自动化的Shell编程入门级监控脚本能帮你7×24小时守护系统健康。

守护你的服务器(手把手教你编写Linux Shell监控脚本) Linux Shell脚本 系统监控 自动化运维 Shell编程入门 第1张

准备工作

你需要一台运行Linux系统的机器(如Ubuntu、CentOS等),并具备基本的命令行操作能力。确保你有权限执行脚本(通常普通用户即可)。

第一步:创建脚本文件

打开终端,输入以下命令创建一个名为 monitor.sh 的脚本文件:

touch monitor.shchmod +x monitor.sh

chmod +x 命令赋予脚本可执行权限。

第二步:编写监控逻辑

使用你喜欢的编辑器(如nano或vim)打开 monitor.sh,粘贴以下代码:

#!/bin/bash# 定义阈值CPU_THRESHOLD=80MEM_THRESHOLD=85DISK_THRESHOLD=90# 获取当前时间CURRENT_TIME=$(date '+%Y-%m-%d %H:%M:%S')# 监控CPU使用率(取1秒内的平均值)CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}')# 监控内存使用率MEM_USAGE=$(free | awk 'NR==2{printf "%.2f", $3*100/$2 }')# 监控根分区磁盘使用率DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')# 打印当前状态echo "[$CURRENT_TIME] CPU: ${CPU_USAGE}% | 内存: ${MEM_USAGE}% | 磁盘: ${DISK_USAGE}%"# 判断是否超过阈值并报警if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then    echo "[警告] CPU使用率过高: ${CPU_USAGE}%"fiif (( $(echo "$MEM_USAGE > $MEM_THRESHOLD" | bc -l) )); then    echo "[警告] 内存使用率过高: ${MEM_USAGE}%"fiif [ $DISK_USAGE -gt $DISK_THRESHOLD ]; then    echo "[警告] 磁盘空间不足: ${DISK_USAGE}% 已使用"fi

第三步:理解脚本原理

  • CPU监控:使用 top -bn1 获取瞬时CPU空闲率,用100减去它得到使用率。
  • 内存监控:通过 free 命令读取总内存和已用内存,计算百分比。
  • 磁盘监控:使用 df / 查看根分区使用情况,并提取百分比数值。
  • 脚本使用 bc 进行浮点数比较(因为bash原生不支持小数运算)。

第四步:测试与运行

保存脚本后,在终端执行:

./monitor.sh

你会看到类似如下的输出:

[2024-06-15 10:30:45] CPU: 12.34% | 内存: 65.78% | 磁盘: 75%

如果某项资源使用率超过设定阈值,还会显示警告信息。

进阶:定时自动运行

为了让脚本每5分钟自动运行一次,可以使用 cron 定时任务:

crontab -e

然后添加一行:

*/5 * * * * /path/to/monitor.sh >> /var/log/system_monitor.log 2>&1

这样,脚本会每5分钟执行一次,并将结果追加到日志文件中,方便后续分析。

结语

通过这个简单的例子,你已经掌握了自动化运维的基础技能。随着经验积累,你可以扩展脚本功能,比如发送邮件告警、集成到监控平台、监控特定进程等。记住,优秀的运维工程师不是靠手动操作,而是靠脚本和工具解放双手!

关键词提示:本文涉及 Linux Shell脚本系统监控自动化运维Shell编程入门,适合初学者学习实践。