Shell监控服务器
通过Shell脚本可以对服务器的多个方面进行监控,包括CPU使用率、内存使用情况、磁盘空间、网络连接等,以下是一些常见的监控方法和示例脚本。
CPU使用率监控
获取CPU使用率
可以使用top
命令或者mpstat
命令来获取CPU的使用率信息。
示例脚本(使用top
命令):
#!/bin/bash # 获取CPU使用率 cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/., ([0-9.])% id./1/" | awk '{print 100 $1}') echo "CPU使用率:$cpu_usage%" # 判断是否超过阈值 threshold=80 if [ $(echo "$cpu_usage > $threshold" | bc) -eq 1 ]; then echo "CPU使用率超过$threshold%!" fi
定时监控CPU使用率
可以使用cron
定时任务来定期执行监控脚本。
示例(每5分钟执行一次脚本):
# 编辑cron任务 crontab -e # 添加以下行 /5 /path/to/cpu_monitor.sh
内存使用情况监控
获取内存使用情况
可以使用free
命令来获取内存的使用情况。
示例脚本:
#!/bin/bash # 获取内存使用情况 total_mem=$(free | grep Mem | awk '{print $2}') used_mem=$(free | grep Mem | awk '{print $3}') echo "总内存:$total_mem MB" echo "已用内存:$used_mem MB" # 计算内存使用率 mem_usage=$(echo "scale=2; $used_mem / $total_mem 100" | bc) echo "内存使用率:$mem_usage%" # 判断是否超过阈值 threshold=80 if [ $(echo "$mem_usage > $threshold" | bc) -eq 1 ]; then echo "内存使用率超过$threshold%!" fi
定时监控内存使用情况
同样可以使用cron
定时任务来定期执行监控脚本。
示例(每5分钟执行一次脚本):
# 编辑cron任务 crontab -e # 添加以下行 /5 /path/to/mem_monitor.sh
磁盘空间监控
获取磁盘空间使用情况
可以使用df
命令来获取磁盘空间的使用情况。
示例脚本:
#!/bin/bash # 获取磁盘空间使用情况 disk_usage=$(df / | grep '/' | awk '{print $5}' | sed 's/%//') echo "磁盘空间使用率:$disk_usage%" # 判断是否超过阈值 threshold=90 if [ $disk_usage -gt $threshold ]; then echo "磁盘空间使用率超过$threshold%!" fi
定时监控磁盘空间使用情况
使用cron
定时任务来定期执行监控脚本。
示例(每小时执行一次脚本):
# 编辑cron任务 crontab -e # 添加以下行 0 /path/to/disk_monitor.sh
网络连接监控
获取网络连接状态
可以使用netstat
命令来获取网络连接的状态。
示例脚本:
#!/bin/bash # 获取网络连接状态 connections=$(netstat -tn | grep tcp | wc -l) echo "当前网络连接数:$connections" # 判断是否超过阈值 threshold=1000 if [ $connections -gt $threshold ]; then echo "网络连接数超过$threshold!" fi
定时监控网络连接状态
使用cron
定时任务来定期执行监控脚本。
示例(每10分钟执行一次脚本):
# 编辑cron任务 crontab -e # 添加以下行 /10 /path/to/net_monitor.sh
相关问题与解答
问题1:如何设置监控脚本的邮件通知?
解答:可以在脚本中添加邮件发送的命令,当监控指标超过阈值时发送邮件通知。
# 在脚本中添加以下行 echo "监控警告:CPU使用率超过$threshold%!" | mail -s "服务器监控警告" your_email@example.com
需要确保服务器上已经配置了邮件发送工具(如mailx
)。
问题2:如何监控多个服务器?
解答:可以将监控脚本部署到一台管理服务器上,通过SSH远程执行监控脚本并收集结果。
#!/bin/bash servers=("server1" "server2" "server3") for server in "${servers[@]}"; do echo "监控服务器:$server" ssh $server '/path/to/monitor.sh' done
需要确保管理服务器可以通过SSH无
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/59821.html