基于 dmesg 解析的自动 rmmod / modprobe

基于 dmesg 解析的自动 rmmod / modprobe

我使用的是 MacBooPro10,1 Debian 稳定版(默认安装rsyslogd)系统,触控板最终会不时出现故障(指针停止工作),如下所示:

$ dmesg
[...]
[1910159.662967] bcm5974: bad trackpad package, length: 8

解决方案很简单:

$ sudo rmmod bcm5974 && sudo modprobe bcm5974

但我宁愿让它自动完成。

如何解析dmesg输出并触发命令(sudo电源)?

答案1

当程序与该行匹配时,您可以要求rsyslogd运行该程序。创建一个文件,例如/etc/rsyslog.d/my.conf包含以下行

:msg, contains, "bad trackpad package" ^/bin/mytrackpadreset

/bin/mytrackpadreset当看到消息时,这将运行脚本,并将整个消息作为单个字符串参数传递。由于守护进程以 root 身份运行,因此您可以简单地将所需的rmmod bcm5974 && modprobe bcm5974命令放入脚本中,但您可能需要先设置合适的 PATH。

我认为过去rsyslogd会等脚本结束后再继续,但现在似乎不再是这样了。如果您希望一次性多次看到该消息,则可能需要在脚本中进行一些额外的工作来应对并行运行多次的情况。

此旧格式 ( ^program) 已被奥普罗格模块对于您想要启动一次并连续运行并在标准输入上向其传递消息的程序更有用。

答案2

通过一点点-ing,您将找到与 中输出grep相同的信息。dmesg/var/log/messages

仍然存在在不浪费资源的情况下观看此文件的问题(并且没有“一分钟cron”,这是相当不雅的)

相关内容