Linux系统监控脚本编写实战:从零到定时任务

准备工作:环境与工具

开始编写Linux系统监控脚本前,先确认你的服务器环境。
你需要一台安装CentOS 7/8、Ubuntu 20.04或更高版本的Linux机器,使用普通用户(非root)登录,但脚本执行时需要sudo权限。
基础工具如bashawkgrepfreedfmpstat等通常系统自带,若缺少mpstat,可执行sudo apt install sysstat(Debian系)或sudo yum install sysstat(RHEL系)。
推荐在/home/你的用户名/scripts目录下创建脚本文件。

第一步:编写CPU与内存监控部分

我们从一个最精简的监控脚本开始,它能采集CPU使用率和内存占用百分比。
创建一个文件monitor.sh

#!/bin/bash
# 获取CPU使用率(取空闲百分比后计算)
idle=$(top -bn1 | grep "Cpu(s)" | awk '{print $8}')
cpu_usage=$(echo "100 - $idle" | bc)
# 获取内存使用率(Used / Total * 100)
mem_total=$(free -m | awk 'NR==2{print $2}')
mem_used=$(free -m | awk 'NR==2{print $3}')
mem_usage=$(echo "scale=2; $mem_used * 100 / $mem_total" | bc)
echo "CPU使用率: $cpu_usage%"
echo "内存使用率: $mem_usage%"
  • top -bn1 一次性输出当前CPU信息,grep "Cpu(s)" 定位行,awk '{print $8}' 提取空闲列。
  • bc 是计算器工具,scale=2 保留两位小数。
  • free -m 以MB显示内存,第二行Total和Used字段。

授执行权限:chmod +x monitor.sh,然后运行 ./monitor.sh 验证输出。
如果报错“bc: command not found”,安装 sudo apt install bc 即可。

第二步:扩展磁盘与网络监控

在脚本中追加磁盘使用率和网络流量统计。
磁盘统计用 df -h /,网络可用 /sys/class/net/eth0/statistics/(替换你的网卡名,如eth0或ens33)。

# 磁盘使用率(根分区)
disk_usage=$(df -h / | awk 'NR==2{print $5}' | sed 's/%//')
echo "根分区磁盘使用率: $disk_usage%"
# 网卡入站流量(单位字节)
if [ -f /sys/class/net/eth0/statistics/rx_bytes ]; then
    rx_bytes=$(cat /sys/class/net/eth0/statistics/rx_bytes)
    tx_bytes=$(cat /sys/class/net/eth0/statistics/tx_bytes)
    echo "入站流量: $rx_bytes 字节"
    echo "出站流量: $tx_bytes 字节"
else
    echo "未找到eth0网卡,请检查网卡名称"
fi

注意:网卡名可在终端输入 ip link showifconfig 确认。
如果你使用不同网卡,替换脚本中的eth0即可。

第三步:添加日志与定时任务

单纯的输出不够实用,我们需要把结果写入日志文件,并用cron定时执行。
在脚本开头定义日志路径,追加时间戳:

LOG_FILE="/var/log/system_monitor.log"
echo "$(date '+%Y-%m-%d %H:%M:%S') 监控开始" >> $LOG_FILE
# 原有采集代码后追加输出到日志
{
    echo "CPU使用率: $cpu_usage%"
    echo "内存使用率: $mem_usage%"
    echo "根分区磁盘使用率: $disk_usage%"
    echo "入站流量: $rx_bytes 字节"
    echo "出站流量: $tx_bytes 字节"
    echo "-------------------------"
} >> $LOG_FILE

注意日志目录权限:如果使用/var/log,需要sudo权限。
可将脚本放在/usr/local/bin/并设置属主。

设置cron定时任务:运行 crontab -e,添加一行每5分钟执行一次:

*/5 * * * * /home/你的用户名/scripts/monitor.sh

保存后cron会自动启用。
查看日志:tail -f /var/log/system_monitor.log 观察是否每5分钟有新增记录。

避坑指南与高频问题解答

问题1:脚本执行报错 “Permission denied”
原因:没有可执行权限或日志目录无写权限。解决:chmod +x 脚本路径,并将日志路径改为自己有权限的目录,如~/monitor.log

问题2:bc未安装导致浮点运算失败
解决:sudo apt install bcsudo yum install bc

问题3:cron任务不执行
检查:1)脚本中是否使用绝对路径(如/usr/bin/awk而非awk);2)cron的环境变量有限,建议在脚本开头导入 export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

问题4:网卡名称不对
使用 ip link show 查看实际名称,如ens33、enp0s3等,修改脚本中对应的文件名。

效果验证建议

手动执行脚本:./monitor.sh 观察输出是否正常。
然后等待cron触发,查看日志文件内容。
也可以使用 journalctl -u cron 查看cron的日志(部分系统)。
如果你看到类似“CPU使用率: 15.2%”这样的持续记录,说明监控脚本已正常工作。
后续可基于此模板扩展告警功能(如CPU超过80%发送邮件)。

分享到:
上一篇
WP网站URL伪静态设置:WordPress网站URL伪静态
下一篇
Docker部署MQTT服务器
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意