Linux 系统服务器监控脚本教程
前提条件
- 一台运行Linux的服务器。
- 对服务器有足够的权限来执行脚本。
- 确保已安装
awk
、df
、free
等基本命令工具。
脚本功能
- 显示服务器基本信息:主机名、IP地址、操作系统、内核版本和运行时间。
- 监控CPU使用率:显示CPU型号、核心数和实时CPU使用率。
- 监控内存使用情况:显示总内存、已使用内存、可用内存。
- 监控磁盘空间:显示磁盘的总量、已使用量和可用量。
安装步骤
- 创建脚本文件:
打开文本编辑器,创建一个新文件,比如命名为monitoring.sh
。 复制并粘贴脚本:
将以下脚本内容复制并粘贴到刚创建的文件中:#!/bin/bash # 获取服务器基本信息 hostname=$(hostname) ip_address=$(hostname -I | awk '{print $1}') os=$(lsb_release -ds || echo "lsb_release command not found") kernel=$(uname -r) uptime=$(uptime -p) # 获取CPU使用率的函数 get_cpu_usage() { # 从/proc/stat读取cpu时间片信息 read -r cpu user nice system idle iowait irq softirq steal guest < /proc/stat total1=$((user+system+nice+idle+iowait+irq+softirq+steal)) idle1=$idle sleep 1 # 等待一秒钟 # 再次读取cpu时间片信息 read -r cpu user nice system idle iowait irq softirq steal guest < /proc/stat total2=$((user+system+nice+idle+iowait+irq+softirq+steal)) idle2=$idle # 计算CPU使用率 total=$((total2-total1)) idle=$((idle2-idle1)) cpu_usage=$((100*(total-idle)/total)) } # 检查依赖的命令 for cmd in awk df free lsb_release uname; do if ! command -v $cmd &> /dev/null; then echo "Command not found: $cmd" exit 1 fi done # 监控循环 while true; do get_cpu_usage # 调用函数获取CPU使用率 # 获取CPU型号和核心数 cpu_model=$(awk -F': ' '/model name/{print $2; exit}' /proc/cpuinfo) cpu_cores=$(grep -c "model name" /proc/cpuinfo) # 获取内存信息 memory_info=$(free -h) read -r memory_total memory_used memory_free memory_shared memory_buffers memory_available <<<$(echo "$memory_info" | awk 'NR==2{print $2,$3,$4,$5,$6,$7}') # 获取磁盘使用情况 read -r disk_total disk_used disk_free <<<$(df -h --output=size,used,avail / | awk 'NR==2{print $1,$2,$3}') # 清除屏幕并输出信息 clear printf -- "服务器信息:\n" printf -- "--------------------------------------\n" printf -- "主机名: %-20s\n" "$hostname" printf -- "IP地址: %-20s\n" "$ip_address" printf -- "操作系统: %-20s\n" "$os" printf -- "内核版本: %-20s\n" "$kernel" printf -- "运行时间: %-20s\n" "$uptime" printf -- "--------------------------------------\n" printf -- "CPU信息:\n" printf -- "型号: %-20s\n" "$cpu_model" printf -- "核心数: %-20s\n" "$cpu_cores" printf -- "CPU使用率: %s%%\n" "$cpu_usage" printf -- "--------------------------------------\n" printf -- "内存信息:\n" printf -- "总量: %-20s\n" "$memory_total" printf -- "已使用: %-20s\n" "$memory_used" printf -- "空闲: %-20s\n" "$memory_free" printf -- "共享: %-20s\n" "$memory_shared" printf -- "缓冲/缓存: %-20s\n" "$memory_buffers" printf -- "可用: %-20s\n" "$memory_available" printf -- "--------------------------------------\n" printf -- "磁盘信息:\n" printf -- "总量: %-20s\n" "$disk_total" printf -- "已使用: %-20s\n" "$disk_used" printf -- "可用: %-20s\n" "$disk_free" printf -- "--------------------------------------\n" # 每 3 秒刷新一次 sleep 3 done
- 保存并关闭文件。
ps:如果你是linux创建,则忽略这里,如果是windows创建再上传到linux,可能会报-bash: ./monitoring.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录
,那么你执行sed -i 's/\r$//' /usr/local/monitoring.sh
命令即可,脚本所在目录替换成实际目录 给脚本执行权限:
在终端中,运行以下命令:chmod +x monitoring.sh
运行脚本:
在终端中,执行以下命令以启动监控:./monitoring.sh
显示如图:
如果在运行脚本时出现 "Command not found: lsb_release"
错误,这意味着您的系统中没有安装 lsb_release
命令。在大多数Linux发行版中,lsb_release
是用于查看Linux发行版信息的命令。为了解决这个问题,您可以尝试以下步骤:
- 检查
lsb_release
命令是否确实不存在。您可以手动在命令行中运行lsb_release -a
来确认。 如果
lsb_release
真的不存在,您可以尝试安装它,具体命令取决于您使用的Linux发行版。以下是一些常见发行版的安装命令示例:对于Debian/Ubuntu发行版,可以运行:
sudo apt-get install lsb-release
对于Red Hat/CentOS发行版,可以运行:
sudo yum install redhat-lsb-core
- 对于其他发行版,您可以查看其包管理器的文档以了解如何安装
lsb-release
。
如果您无法安装
lsb_release
或者不想使用它,您可以考虑手动设置您的系统信息,以便脚本可以继续运行。您可以编辑脚本,手动设置变量os
为您的Linux发行版名称,例如:os="Your Linux Distribution"
使用说明
- 运行脚本后,它将每3秒自动更新显示的信息。
- 要停止脚本,可以使用
Ctrl + C
快捷键。
注意事项
- 请确保所有依赖的命令在您的系统上可用。
- 这个脚本适用于大多数Linux发行版,但在某些特殊环境中可能需要调整。
- 监控脚本对系统性能的影响通常很小,但在资源非常有限的环境中,请注意其对系统性能的潜在影响。