可能有其他方法可以比轮询更优雅地做到这一点,但 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必须检查上面的输出是否与感兴趣的日志条目匹配。从您发布的错误消息中,我不确切知道哪些关键词会提示空灯丝箱,但我们现在假设它们是ultimakersystemand 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.txtdate$USERman mail