可能有其他方法可以比轮询更优雅地做到这一点,但 FWIW:
journalctl
可以对其输出进行时间过滤;例如查看最近 30 分钟的活动:
journalctl --since "30 min ago" --until "now"
cron
可以在不同的时间间隔运行作业;journalctl
例如,要每 30 分钟运行一次上述作业,请将这一行放入您的crontab
:
0,30 * * * * /bin/journalctl --since "30 min ago" --until "now"
journalctl
必须检查上面的输出是否与感兴趣的日志条目匹配。从您发布的错误消息中,我不确切知道哪些关键词会提示空灯丝箱,但我们现在假设它们是ultimakersystem
and paused
。awk
提供了一种可扩展的方式来查找匹配的单词和短语:awk '/pattern1/ && /pattern2/'
当两种模式出现在同一行journalctl
输出中时匹配,因此将输出中的 apipe
添加journalctl
到awk
; 上面的cron
作业修改如下:
0,30 * * * * /bin/journalctl --since "30 min ago" --until "now" | awk '/ultimakersystem/ && /paused/'
- 最后一步是测试是否
awk
找到匹配项,如果找到,则向指定用户发送消息。如果匹配到一个或多个,只需要发送一封电子邮件,因此将在一个END
部分进行匹配测试。cron
作业再次更新如下:
0,30 * * * * /bin/journalctl --since "30 min ago" --until "now" | awk '/ultimakersystem/ && /paused/ {m=1}; END { if (m == 1){system("cat warn.txt | mail -s FILAMENT_NEEDED $USER")} }'
awk
使用模式-动作范式;/ultimakersystem/ && /paused/
是格局,{m=1}
是行动。awk
处理完所有journalctl
输出后,END
执行该部分。一个简单的if (m == 1)
测试确定是否发生了一个或多个匹配,如果是,mail
则调用该命令来发送定义在warn.txt
. GNUawk
的system
函数REF提供对系统命令库的访问。
在更改此配方的许多其他可能性中,可以通过替换为 将日期时间戳插入电子邮件正文,并将邮件发送给除. 请参阅或您的电子邮件客户端的文档。cat warn.txt
date
$USER
man mail