ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

树莓派系统监控实战:Python脚本实现CPU温度与内存使用率实时监控

树莓派系统监控实战:Python脚本实现CPU温度与内存使用率实时监控 简介本资源是一套面向树莓派初学者与课程设计/毕业设计实践者的轻量级系统监控解决方案聚焦CPU温度与内存使用率两大核心硬件指标的实时采集与可视化展示适用于嵌入式Linux系统运维、IoT设备健康监测等典型教学与项目场景。压缩包共16个文件672KB含4个Python主控脚本负责传感器读取与数据处理、4个HTML前端页面含cpu.html、mem.html等独立视图、3个JavaScript文件基于CanvasJS实现动态图表渲染、1个启动脚本main.sh及README.md、LICENSE等工程必要文件结构清晰、模块解耦便于理解Flask后端服务与静态资源协同机制。目前已有153人学习下载提供开箱即用的完整监控流程从树莓派终端温度读取、内存信息解析到Web界面本地部署与实时刷新附带可直接运行的pi-monitor-flask.py服务入口与配套静态资源目录是掌握嵌入式Web监控开发的实用入门范例。1. 项目缘起为什么需要监控树莓派如果你手头有一台树莓派无论是用来做家庭服务器、智能家居中枢、下载机还是跑一些轻量级的AI模型你迟早会遇到一个场景它突然变慢了或者干脆死机了。你重启之后一切如常但问题就像幽灵一样时不时回来骚扰你。这时候你需要的不是玄学而是数据——关于系统运行状态的硬核数据。CPU温度和内存使用率就是两个最核心的指标。树莓派尤其是性能更强的4B和5代虽然体积小巧但功耗和发热不容小觑。它的CPU没有主动散热风扇除非你额外加装全靠那块小小的散热片和空气对流。在长时间高负载运行比如转码视频、编译软件或者运行Docker容器时CPU温度很容易飙升到80°C甚至更高。虽然官方说能扛到85°C但长期高温运行会加速电子元件老化触发CPU降频保护导致性能直线下降也就是你感觉到的“变卡了”。内存更是如此。树莓派的内存是板载的无法扩展。如果你跑的服务多了内存被吃满系统就会开始使用交换分区Swap。而树莓派的交换分区默认在MicroSD卡上SD卡的读写速度远低于内存一旦开始频繁交换整个系统的响应速度就会变得惨不忍睹跟死机也差不多了。所以监控这两个指标不是为了看几个数字图个乐而是为了预防故障在温度过高或内存耗尽导致系统崩溃前提前预警。性能调优找出是哪个进程在“作妖”吃掉大量资源从而进行优化或限制。健康评估了解你的树莓派在特定工作负载下的稳定状态为散热改造比如加装风扇、散热片或服务部署规划提供依据。这个项目就是带你从零开始搭建一套轻量级、可视化、可告警的树莓派系统监控方案。我们不依赖复杂的PrometheusGrafana全家桶虽然那很强大而是用更原生、更直接的方法实现核心指标的采集、展示与通知。2. 监控基石理解树莓派的系统信息接口在动手写脚本之前我们必须搞清楚数据从哪来。树莓派基于Linux提供了多种获取系统信息的途径但针对温度和内存各有其“最佳路径”。2.1 CPU温度从/sys/class/thermal读取在Linux系统中硬件传感器信息通常通过虚拟文件系统sysfs暴露路径在/sys下。对于树莓派的CPU温度标准路径是/sys/class/thermal/thermal_zone0/temp你可以直接用cat命令查看cat /sys/class/thermal/thermal_zone0/temp输出会是一个整数例如51234。这里有个关键点这个值的单位是毫摄氏度millidegree Celsius。所以51234代表 51.234°C。在后续处理中我们需要将其除以1000来得到我们熟悉的摄氏度值。为什么是这个路径thermal_zone0通常对应着SoC片上系统即树莓派的处理器的温度传感器。这是最直接、最可靠的官方接口所有树莓派官方系统Raspberry Pi OS, Ubuntu等都支持。注意有些教程可能会提到/proc文件系统或vcgencmd命令。/proc下的信息更偏重系统运行状态而非硬件传感器。vcgencmd是树莓派视频核心VideoCore GPU的专用工具命令虽然也能获取温度vcgencmd measure_temp但它依赖于特定的用户权限和库在某些精简版系统或容器环境中可能不可用。因此从/sys读取是兼容性最好的方法。2.2 内存使用率解析/proc/meminfo内存信息集中在/proc/meminfo这个文件里。它不像温度那样只有一个值而是提供了内存状态的完整快照。我们关心的主要是以下几行MemTotal: 4045976 kB MemFree: 102384 kB MemAvailable: 856312 kB Buffers: 123456 kB Cached: 2345678 kB SwapTotal: 102400 kB SwapFree: 102400 kB这里需要理解几个关键概念MemTotal物理内存总量。MemFree完全未被使用的内存。这个值通常很小因为Linux会充分利用空闲内存来缓存磁盘数据Cached和缓冲写入Buffers以提升性能。MemAvailable这是估算可用内存的关键指标。它表示在不使用交换分区的情况下系统可用于启动新应用程序的内存估计值。它包含了MemFree、部分Buffers和Cached可回收的部分。因此计算内存使用率更合理的方式是内存使用率 (MemTotal - MemAvailable) / MemTotal * 100%Cached缓存内存用于存储从磁盘读取的文件加速后续访问。这部分内存在应用程序需要时可以被快速回收。SwapTotal/SwapFree交换分区总量和剩余量。所以我们的监控脚本需要读取这个文件提取出MemTotal和MemAvailable的值然后进行计算。3. 实战编写核心监控脚本理解了数据来源我们就可以动手编写一个Python脚本。选择Python是因为它在树莓派上几乎默认安装库丰富编写简单。我们将创建一个功能完整的脚本它不仅能采集数据还能进行简单的阈值判断。3.1 脚本设计与依赖脚本名我们可以叫system_monitor.py。它需要完成以下功能读取CPU温度。读取并计算内存使用率。将数据格式化为易读的字符串。可选根据预设阈值进行判断并给出警告。可选将数据写入日志文件供后续分析。这个脚本不需要安装额外的Python包完全使用标准库。3.2 代码实现与逐行解析下面是完整的脚本代码我将结合代码详细解释每一步的意图和细节。#!/usr/bin/env python3 树莓派系统监控脚本 - 监控CPU温度和内存使用率 import os import time from datetime import datetime # 配置部分可以在这里调整阈值和日志设置 CPU_TEMP_WARNING 70.0 # CPU温度警告阈值摄氏度 MEM_USAGE_WARNING 85.0 # 内存使用率警告阈值百分比 LOG_ENABLED True # 是否启用日志记录 LOG_FILE /var/log/pi_monitor.log # 日志文件路径 def get_cpu_temperature(): 从 /sys/class/thermal 读取CPU温度。 返回浮点型温度值摄氏度。 try: with open(/sys/class/thermal/thermal_zone0/temp, r) as f: temp_millic int(f.read().strip()) return temp_millic / 1000.0 except (FileNotFoundError, ValueError, IOError) as e: print(f读取CPU温度失败: {e}) return None def get_memory_usage(): 从 /proc/meminfo 读取并计算内存使用率。 返回一个字典包含总量、可用量、使用率和单位。 mem_info {} try: with open(/proc/meminfo, r) as f: lines f.readlines() for line in lines: if MemTotal in line: mem_info[total] int(line.split()[1]) # 单位是kB elif MemAvailable in line: mem_info[available] int(line.split()[1]) # 单位是kB # 如果找到两个关键值提前退出循环以提高效率 if total in mem_info and available in mem_info: break if total in mem_info and available in mem_info: used mem_info[total] - mem_info[available] mem_info[usage_percent] (used / mem_info[total]) * 100 mem_info[unit] kB else: print(在 /proc/meminfo 中未找到 MemTotal 或 MemAvailable) return None except (FileNotFoundError, ValueError, IOError) as e: print(f读取内存信息失败: {e}) return None return mem_info def check_thresholds(cpu_temp, mem_usage_percent): 检查指标是否超过阈值。 返回警告信息列表如果正常则返回空列表。 warnings [] if cpu_temp is not None and cpu_temp CPU_TEMP_WARNING: warnings.append(fCPU温度过高: {cpu_temp:.1f}°C {CPU_TEMP_WARNING}°C) if mem_usage_percent is not None and mem_usage_percent MEM_USAGE_WARNING: warnings.append(f内存使用率过高: {mem_usage_percent:.1f}% {MEM_USAGE_WARNING}%) return warnings def write_to_log(message): 将消息写入日志文件。 if not LOG_ENABLED: return try: with open(LOG_FILE, a) as f: timestamp datetime.now().strftime(%Y-%m-%d %H:%M:%S) f.write(f[{timestamp}] {message}\n) except IOError as e: print(f写入日志文件失败: {e}) def main(): 主函数采集数据、检查阈值、输出结果。 # 1. 采集数据 cpu_temp get_cpu_temperature() mem_info get_memory_usage() # 获取当前时间 current_time datetime.now().strftime(%Y-%m-%d %H:%M:%S) # 2. 准备输出信息 output_lines [] output_lines.append(f 系统监控报告 {current_time} ) if cpu_temp is not None: output_lines.append(fCPU温度: {cpu_temp:.1f} °C) else: output_lines.append(CPU温度: 读取失败) if mem_info is not None: # 将kB转换为GB或MB便于阅读 total_gb mem_info[total] / (1024 * 1024) if mem_info[total] 1024*1024 else mem_info[total] / 1024 total_unit GB if mem_info[total] 1024*1024 else MB available_gb mem_info[available] / (1024 * 1024) if mem_info[available] 1024*1024 else mem_info[available] / 1024 available_unit GB if mem_info[available] 1024*1024 else MB output_lines.append(f内存总量: {total_gb:.2f} {total_unit}) output_lines.append(f可用内存: {available_gb:.2f} {available_unit}) output_lines.append(f内存使用率: {mem_info[usage_percent]:.1f} %) else: output_lines.append(内存信息: 读取失败) # 3. 检查阈值并生成警告 mem_usage_for_check mem_info[usage_percent] if mem_info else None warnings check_thresholds(cpu_temp, mem_usage_for_check) if warnings: output_lines.append(\n[!] 警告:) for warning in warnings: output_lines.append(f - {warning}) # 将警告信息也写入日志 for warning in warnings: write_to_log(f警告 - {warning}) else: output_lines.append(\n[i] 状态: 正常) # 4. 输出到控制台 print(\n.join(output_lines)) # 5. 将本次监控结果写入日志可选 log_message f状态 - CPU: {cpu_temp:.1f}°C, Mem: {mem_usage_for_check:.1f}% write_to_log(log_message) if __name__ __main__: main()关键代码解析与避坑指南get_cpu_temperature函数temp_millic int(f.read().strip())strip()用于移除末尾可能存在的换行符或空格int()确保转换为整数。这里必须处理异常因为文件可能不存在比如在非树莓派设备上运行或内容格式错误。return temp_millic / 1000.0牢记单位转换。除以1000.0浮点数确保结果是浮点数精度更高。get_memory_usage函数使用with open...上下文管理器确保文件正确关闭。line.split()[1]/proc/meminfo的每一行格式如MemTotal: 4045976 kB。split()默认按空白字符分割得到[MemTotal:, 4045976, kB]索引[1]就是数字部分。我们只取数字单位在代码里统一处理。计算使用率时采用(MemTotal - MemAvailable) / MemTotal这个更反映实际情况的公式。日志路径权限问题脚本中日志文件默认设为/var/log/pi_monitor.log。/var/log目录通常需要root权限才能写入。你有两个选择方案A推荐修改LOG_FILE路径到一个你有写入权限的目录比如~/pi_monitor.log你的家目录或/tmp/pi_monitor.log临时目录重启可能丢失。方案B使用sudo运行脚本但这不是长久之计。方案C手动创建日志文件并更改所有者。可以先以root身份创建sudo touch /var/log/pi_monitor.log然后将所有者改为你的普通用户sudo chown $USER:$USER /var/log/pi_monitor.log。这样你的脚本就能正常写入了。单位换算的细节在输出内存时我们做了自适应单位转换。判断if mem_info[total] 1024*1024即是否大于 1048576 kB约1GB如果大于就用GB显示否则用MB。这样对于不同内存大小的树莓派1GB, 2GB, 4GB, 8GB都能友好显示。3.3 运行与测试脚本将上述代码保存为system_monitor.py。首先给它添加可执行权限非必须但方便chmod x system_monitor.py然后运行它python3 system_monitor.py或者如果你加了可执行权限且脚本第一行shebang(#!/usr/bin/env python3) 正确可以直接./system_monitor.py你应该能看到类似下面的输出 系统监控报告 2023-10-27 14:30:00 CPU温度: 48.7 °C 内存总量: 3.86 GB 可用内存: 1.24 GB 内存使用率: 67.8 % [i] 状态: 正常你可以故意运行一些消耗资源的命令比如用stress工具压测CPU或用python3 -c a * (1024*1024*500)吃掉500MB内存来观察数值变化并测试阈值警告是否触发。4. 进阶实现定时监控与可视化单次运行脚本意义有限我们需要它定时运行并将数据持久化最终实现可视化。这里我们分两步走先用最经典的Cron实现定时任务再用一个轻量级的文本图表工具展示趋势。4.1 使用Cron实现定时任务Cron是Linux系统最常用的定时任务调度器。我们的目标是每分钟运行一次监控脚本并将输出追加到日志文件中。编辑Cron表 在终端输入crontab -e。如果是第一次使用可能会让你选择编辑器选nano比较简单。在文件末尾添加一行* * * * * /usr/bin/python3 /home/pi/system_monitor.py /home/pi/monitor_cron.log 21* * * * *时间表达式表示“每分钟”。/usr/bin/python3Python3解释器的完整路径可以用which python3命令查看你的路径。/home/pi/system_monitor.py你的监控脚本的绝对路径。 /home/pi/monitor_cron.log将标准输出追加到指定日志文件。21将标准错误2重定向到标准输出1这样错误信息也会被记录到日志。重要提示脚本和日志的路径必须使用绝对路径因为Cron执行任务时的环境变量如$HOME与你的登录Shell不同。使用~/可能会找不到文件。保存并退出在nano编辑器里是按CtrlX然后按Y确认再按回车。验证Cron任务等待一分钟检查/home/pi/monitor_cron.log文件是否生成并有内容。可以用crontab -l列出当前用户的所有Cron任务。Cron的常见坑与解决环境变量问题Cron的环境非常干净可能缺少PATH等变量。这就是为什么我们强调要用绝对路径/usr/bin/python3。如果你在脚本里依赖其他环境变量最好在脚本内部用绝对路径或者在Cron任务行的顶部定义PATH例如PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin * * * * * /usr/bin/python3 /home/pi/system_monitor.py ...权限问题确保Cron任务所属用户你对脚本和日志文件有执行和写入权限。调试如果任务没执行首先检查系统邮件/var/mail/piCron的错误输出通常会发到那里。或者将Cron命令改为输出到另一个文件方便查看错误* * * * * /usr/bin/python3 /path/to/script.py /tmp/cron_debug.log 21。4.2 使用vcgencmd获取更丰富的硬件信息可选vcgencmd是树莓派博通芯片组的一个强大工具可以获取许多底层硬件信息。如果你的系统安装了libraspberrypi-bin包Raspberry Pi OS通常默认安装就可以使用。# 获取CPU温度与/sys接口一致格式不同 vcgencmd measure_temp # 输出temp48.7C # 获取CPU时钟频率当前频率 vcgencmd measure_clock arm # 输出frequency(45)1500000000 单位是Hz这里是1.5GHz # 获取核心电压 vcgencmd measure_volts core # 输出volt1.2000V # 获取内存分配情况CPU和GPU各分了多少 vcgencmd get_mem arm vcgencmd get_mem gpu # 输出arm948M gpu76M你可以修改之前的Python脚本使用subprocess模块来调用vcgencmd并解析输出从而丰富监控数据。例如监控CPU频率可以了解是否发生了降频。4.3 简易终端可视化用watch和gpustat风格输出如果你喜欢在终端里实时查看可以结合watch命令。watch能定期执行一条命令并全屏显示结果。watch -n 2 -c ./system_monitor.py-n 2每2秒刷新一次。-c解释颜色序列如果你的脚本输出有颜色的话。 这样你就能在一个终端窗口里看到动态更新的系统状态了。更进一步我们可以模仿gpustat、htop这类工具的风格用简单的文本条来可视化。下面是一个增强版的输出函数示例可以替换原脚本中的main函数末尾的打印部分def display_fancy(cpu_temp, mem_info): 以更可视化的方式在终端显示 if cpu_temp is None or mem_info is None: return # 简单的温度条 temp_bar_length 20 temp_filled int((cpu_temp / 85.0) * temp_bar_length) # 假设85°C为满刻度 temp_filled min(temp_filled, temp_bar_length) temp_bar █ * temp_filled ░ * (temp_bar_length - temp_filled) # 简单的内存条 mem_bar_length 30 mem_filled int((mem_info[usage_percent] / 100.0) * mem_bar_length) mem_filled min(mem_filled, mem_bar_length) mem_bar █ * mem_filled ░ * (mem_bar_length - mem_filled) print(f\033[2J\033[H) # 清屏并光标归位可选用于watch模式 print(f{*50}) print(f实时系统监控) print(f{*50}) print(fCPU温度: {cpu_temp:5.1f}°C [{temp_bar}]) print(f内存使用: {mem_info[usage_percent]:5.1f}% [{mem_bar}]) print(f可用内存: {mem_info[available]/1024:.1f} MB / {mem_info[total]/1024:.1f} MB) print(f{*50})然后在main函数中调用display_fancy(cpu_temp, mem_info)。配合watch -n 1 python3 monitor_fancy.py就能获得一个动态刷新的简易仪表盘。5. 数据持久化与简单分析日志文件有了但它是文本看起来不直观。我们可以用一些简单的方法进行分析。5.1 使用awk和grep进行快速日志分析假设你的日志文件每行格式如[2023-10-27 14:30:00] 状态 - CPU: 48.7°C, Mem: 67.8%。查看过去一小时的最高CPU温度grep 状态 /home/pi/monitor_cron.log | tail -60 | awk -FCPU: |°C {print $2} | sort -rn | head -5grep 状态过滤出包含监控状态的行。tail -60取最后60行假设每分钟一次即过去一小时。awk -FCPU: |°C以“CPU: ”和“°C”作为字段分隔符打印第二个字段温度值。sort -rn按数字逆序排序。head -5显示前5个即最高的5个温度值。计算平均内存使用率grep 状态 /home/pi/monitor_cron.log | tail -120 | awk -FMem: |% {sum$2; count} END {print 平均内存使用率:, sum/count, %}5.2 使用Python进行简单的趋势绘图可选如果你想让数据更直观可以写一个简单的Python脚本用matplotlib库来绘制温度和时间的变化曲线。这需要在树莓派上安装matplotlib。sudo apt update sudo apt install python3-matplotlib然后创建一个分析脚本plot_temperature.pyimport matplotlib.pyplot as plt import matplotlib.dates as mdates from datetime import datetime import re log_file /home/pi/monitor_cron.log timestamps [] temperatures [] # 解析日志文件 with open(log_file, r) as f: for line in f: if 状态 - CPU: in line: # 使用正则表达式匹配时间戳和温度 match re.search(r\[(.*?)\] .*CPU: ([\d.]), line) if match: ts_str, temp_str match.groups() try: ts datetime.strptime(ts_str, %Y-%m-%d %H:%M:%S) temp float(temp_str) timestamps.append(ts) temperatures.append(temp) except ValueError: continue if not timestamps: print(未在日志中找到有效数据。) exit() # 创建图表 fig, ax plt.subplots(figsize(12, 6)) ax.plot(timestamps, temperatures, markero, linestyle-, linewidth1, markersize3) ax.set_xlabel(时间) ax.set_ylabel(CPU温度 (°C)) ax.set_title(树莓派CPU温度趋势图) ax.grid(True, whichboth, linestyle--, linewidth0.5, alpha0.7) # 格式化X轴时间显示 ax.xaxis.set_major_formatter(mdates.DateFormatter(%m-%d %H:%M)) ax.xaxis.set_major_locator(mdates.HourLocator(interval2)) # 每2小时一个主刻度 plt.xticks(rotation45) plt.tight_layout() # 保存图片 plt.savefig(/home/pi/cpu_temp_trend.png, dpi150) print(图表已保存为 /home/pi/cpu_temp_trend.png) # 如果想直接显示可以取消下面这行的注释需要图形界面或配置了X11转发 # plt.show()运行这个脚本就能生成一张PNG格式的温度趋势图。你可以通过SFTP将图片下载到本地电脑查看或者在树莓派上安装图片查看器。6. 扩展思路从监控到告警与集成基础监控搭建完成后你可以根据需求进行扩展。6.1 实现邮件或App告警当温度或内存超过阈值时除了在日志里记录你肯定希望立即收到通知。我们可以集成邮件发送功能。首先你需要配置树莓派的邮件发送功能。一个简单的方法是使用msmtp配合Gmail或QQ邮箱的SMTP服务。这里以Gmail为例需开启“应用专用密码”而非直接使用登录密码安装msmtp和mailutilssudo apt install msmtp msmtp-mta mailutils配置msmtp 编辑配置文件~/.msmtprcdefaults auth on tls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp.log account gmail host smtp.gmail.com port 587 from your_emailgmail.com user your_emailgmail.com password your_app_specific_password # 注意这里是应用专用密码 account default : gmail然后设置文件权限保护密码chmod 600 ~/.msmtprc修改监控脚本添加发送邮件函数 在system_monitor.py中添加import subprocess def send_email_alert(subject, body, to_emailyour_target_emailexample.com): 使用系统mail命令发送邮件 try: # 使用管道将邮件内容传递给mail命令 process subprocess.Popen( [mail, -s, subject, to_email], stdinsubprocess.PIPE, stdoutsubprocess.PIPE, stderrsubprocess.PIPE, textTrue ) stdout, stderr process.communicate(inputbody) if process.returncode ! 0: print(f发送邮件失败: {stderr}) else: print(告警邮件已发送。) except Exception as e: print(f调用邮件命令出错: {e})然后在main函数中当warnings列表不为空时调用这个函数if warnings: # ... 原有的输出警告代码 ... email_body f树莓派系统告警\n时间: {current_time}\n \n.join(warnings) send_email_alert(【树莓派监控告警】, email_body)注意频繁发送邮件可能会被邮件服务商限制。生产环境中可以考虑加入“冷却时间”机制比如每小时只发送一次相同类型的告警。6.2 集成到Prometheus Grafana高级玩法如果你有多台设备需要监控或者追求更专业、更美观的仪表盘那么Prometheus时序数据库和拉取器加Grafana可视化是行业标准组合。这超出了本文的基础范畴但思路可以简述在树莓派上运行Node ExporterPrometheus的官方节点指标导出器能暴露海量的系统指标包括CPU、内存、磁盘、网络、温度等。你需要下载对应ARM架构的版本。配置Prometheus服务器在另一台机器可以是另一台树莓派或你的电脑上运行Prometheus并配置它定期从树莓派的Node Exporter拉取数据。使用Grafana可视化在Prometheus服务器或另一台机器上运行Grafana添加Prometheus作为数据源然后创建仪表盘。你可以轻松地绘制出漂亮的温度曲线图、内存使用堆叠图并设置灵活的告警规则。这套方案功能强大但部署和维护相对复杂适合有一定运维经验的用户。对于单台树莓派的日常监控我们前面自建的脚本方案已经足够轻量、有效。6.3 监控其他指标有了这个框架你可以轻松扩展监控其他指标磁盘使用率使用shutil.disk_usage(/)或解析df -h命令输出。网络流量读取/proc/net/dev文件计算特定网卡如eth0或wlan0的收发字节数差值。进程监控使用psutil库需安装可以非常方便地获取进程列表、CPU/内存占用Top N等信息。服务状态检查关键服务如Docker、Nginx、MySQL是否在运行可以用subprocess调用systemctl is-active service_name。7. 长期运行与维护建议让监控系统稳定可靠地长期运行还需要注意以下几点日志轮转Log Rotation/home/pi/monitor_cron.log文件会越来越大。可以使用Linux自带的logrotate工具来管理。创建配置文件/etc/logrotate.d/pi_monitor/home/pi/monitor_cron.log { daily missingok rotate 7 compress delaycompress notifempty create 644 pi pi }这表示每天轮转一次保留最近7天的日志并压缩旧日志。监控脚本本身的健康如果脚本本身因为某些原因如Python环境问题、权限变更崩溃Cron任务就失效了。一个简单的守护方法是写一个Shell脚本包装器捕获错误并记录。或者更可靠的方法是使用systemd服务来管理监控脚本利用其自动重启机制。阈值动态调整固定的阈值如70°C可能不适合所有季节。夏天环境温度高树莓派待机温度可能就50°C稍微一用就超阈值。可以考虑根据历史数据比如过去24小时的平均温度来动态计算告警阈值。资源消耗自省监控脚本本身也会消耗极少的CPU和内存。确保你的脚本是高效的避免在循环中频繁打开/关闭文件使用缓存等。对于每分钟运行一次的脚本这点消耗通常可以忽略不计。通过这个从数据采集、脚本编写、定时任务到可视化告警的完整流程你不仅获得了一个实用的树莓派监控工具更深入理解了Linux系统信息获取、进程调度和系统维护的许多细节。这套方法论同样可以迁移到其他Linux设备和监控场景中。本文还有配套的精品资源点击获取
返回列表