本文目录导读:

要用脚本监控系统资源,最常用的方法是使用 Shell 脚本(Linux/macOS)或 PowerShell(Windows),以下是几种常见的监控场景及对应的脚本示例。
Linux 系统(Shell/Bash)
监控 CPU 使用率
#!/bin/bash
# 获取CPU空闲百分比,然后反算使用率
cpu_idle=$(top -bn1 | grep "Cpu(s)" | awk '{print $8}')
cpu_usage=$(echo "100 - $cpu_idle" | bc)
echo "CPU使用率: $cpu_usage%"
监控内存使用率
#!/bin/bash
mem_total=$(free -m | awk '/^Mem:/{print $2}')
mem_used=$(free -m | awk '/^Mem:/{print $3}')
mem_usage=$(echo "scale=2; $mem_used / $mem_total * 100" | bc)
echo "内存使用率: $mem_usage%"
监控磁盘使用率(指定分区)
#!/bin/bash
disk_usage=$(df -h / | awk 'NR==2{print $5}' | sed 's/%//')
echo "磁盘使用率: $disk_usage%"
if [ "$disk_usage" -gt 90 ]; then
echo "警告:磁盘使用率超过90%"
fi
综合监控 + 告警(循环执行)
#!/bin/bash
while true; do
cpu=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}')
mem=$(free -m | awk '/^Mem:/{printf "%.1f", $3/$2*100}')
disk=$(df -h / | awk 'NR==2{print $5}' | sed 's/%//')
echo "[$(date)] CPU: ${cpu}% | 内存: ${mem}% | 磁盘: ${disk}%"
# 超过阈值发告警(可替换为邮件、钉钉、飞书等)
if (( $(echo "$cpu > 90" | bc -l) )); then
echo "CPU告警" | mail -s "CPU超限" admin@example.com
fi
sleep 60
done
Windows 系统(PowerShell)
监控 CPU 使用率
$cpu = (Get-CimInstance Win32_Processor | Measure-Object -Property LoadPercentage -Average).Average Write-Host "CPU使用率: $cpu%"
监控内存使用率
$os = Get-CimInstance Win32_OperatingSystem $mem_usage = [math]::Round(($os.TotalVisibleMemorySize - $os.FreePhysicalMemory) / $os.TotalVisibleMemorySize * 100, 2) Write-Host "内存使用率: $mem_usage%"
监控磁盘使用率(C 盘)
$disk = Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'" $disk_usage = [math]::Round(($disk.Size - $disk.FreeSpace) / $disk.Size * 100, 2) Write-Host "C盘使用率: $disk_usage%"
循环监控 + 日志记录
while ($true) {
$cpu = (Get-CimInstance Win32_Processor | Measure-Object -Property LoadPercentage -Average).Average
$os = Get-CimInstance Win32_OperatingSystem
$mem = [math]::Round(($os.TotalVisibleMemorySize - $os.FreePhysicalMemory) / $os.TotalVisibleMemorySize * 100, 2)
$disk = Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='C:'"
$disk_usage = [math]::Round(($disk.Size - $disk.FreeSpace) / $disk.Size * 100, 2)
$log = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') | CPU: $cpu% | 内存: $mem% | 磁盘: $disk_usage%"
Write-Host $log
# 写入日志文件
Add-Content -Path "C:\monitor.log" -Value $log
Start-Sleep -Seconds 60
}
跨平台方案(Python)
如果你希望一个脚本在 Linux/Windows/macOS 都能用,Python 是最佳选择:
#!/usr/bin/env python3
import psutil
import time
import datetime
def monitor():
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(f"[{now}] CPU: {cpu}% | 内存: {mem}% | 磁盘: {disk}%")
# 告警示例
if cpu > 90:
print("⚠️ CPU 超过 90%")
if __name__ == "__main__":
while True:
monitor()
time.sleep(60)
安装依赖:
pip install psutil
进阶:接入告警系统
钉钉机器人通知(Linux)
#!/bin/bash
send_dingtalk() {
curl -s -X POST "https://oapi.dingtalk.com/robot/send?access_token=你的TOKEN" \
-H "Content-Type: application/json" \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$1\"}}"
}
cpu=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}')
if (( $(echo "$cpu > 90" | bc -l) )); then
send_dingtalk "⚠️ CPU告警: 当前 ${cpu}%"
fi
企业微信机器人(Python)
import requests
import json
def send_wechat(msg, webhook_url):
data = {"msgtype": "text", "text": {"content": msg}}
requests.post(webhook_url, data=json.dumps(data), headers={"Content-Type":"application/json"})
建议
- 不要直接输出原始数据:建议加上时间戳、单位、阈值判断。
- 设置合理的告警阈值:CPU 建议 80~90%,内存 80~90%,磁盘 85~90%。
- 考虑性能开销:
top -bn1或psutil.cpu_percent(interval=1)会占用少量 CPU,监控频率不需要太高。 - 使用系统级监控工具:如果只是日常运维,建议直接使用
htop、glances、nmon等现成工具,脚本更适合定制化告警或自动运维。
如果你有具体的操作系统或告警方式需求,可以补充,我可以帮你写更精确的脚本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播