当温度超过阈值时运行命令,无需守护进程

当温度超过阈值时运行命令,无需守护进程

如果我的笔记本电脑变得太热,我需要运行特定的命令(例如,向 Firefox 或 Virtualbox 发送停止信号,以防止我的笔记本电脑剧烈关闭并损坏我的硬盘)。

我可以轻松编写一个无限循环的程序,同时定期检查温度。问题的答案使用了这种方法。

但是,我想避免运行我自己的守护进程,而是将我的程序附加到现有的守护进程。例如,我可以在我的系统日志中看到:

5 月 5 日 02:52:27 myhostname 内核:[ 9141.022262] intel ips 0000:00:1f.6:超出 MCP 限制:平均温度 9276,限制 9000

因此,我的机器中已经有代码检查温度,它会根据条件触发某些操作(例如,当温度超过 9000 时记录警告消息)。另一个例子是风扇根据相同的温度加速。

如何将我的程序附加到我的机器中的现有代码?风扇驱动程序速度变化和内核温度警告消息是否由同一代码触发?我怎样才能找到这个?

答案1

您将必须运行某种守护程序来监视此类事情。硬件传感器只是惰性数据源,通常无法自行执行操作。

如果您只是想出去编写自定义代码,您可以考虑安装collectd-sensors包裹(您的发行版可能会称之为其他名称)它将保留温度历史记录。配置跟踪温度数据后,collectd您应该能够设置收集通知对于这样的活动。

答案2

如何将我的程序附加到此代码中?

该特定输出来自内核,因此您可能能够为此编写一个内核模块,或者如果该信息不可全局访问,则可以对现有模块进行修补。

您已经运行的 WRT 守护进程,您可以使用cron并每隔一分钟左右检查一次。

如果你想要比分钟更精细的粒度,你需要编写自己的循环,或者找到一个已经可以做到这一点的工具——一些 GUI 系统监视器可能允许你配置可以运行任意进程的警报(我gkrellm注意到不是,而且仅通过谷歌搜索很难判断conky)。

答案3

似乎 DBUS 或 ACPI 事件是锁定这些“事件”并触发命令来执行您想要的操作的地方。我展示了一种执行此操作的方法dbus-monitor,可以使用该方法来“捕获”这些事件,然后运行脚本。

看看我对 U&L 问答的回答,标题为:libnotify 可以用来执行脚本吗?

答案4

这要求您愿意让 Firefox/Virtualbox 的触发器与触发日志消息的温度相同,并且还愿意运行 syslog-ng。

syslog-ng 可以配置为运行由从特定程序或具有特定内容发送到日志的消息触发的任意代码。

在 syslog-ng.conf 中,您将添加一个新目标:

destination d_high_temp { program("/path/to/OPs/temperature_script"); };

还有一个新的过滤器

filter f_high_temp { match("MCP limit exceeded" value("MESSAGE")); };

最后

log { source(src); filter(f_high_temp); destination(d_high_temp); };

您将不再运行更多的守护程序,但仍然可以关闭您喜欢的任何程序。

相关内容