Linux:当文件更改时提醒用户

She*_*oss 4 linux display cups quota

这是一个更一般的使用问题。

如何监视日志文件的特定更改,并在 Ubuntu 中使用“通知发送”警报在发生所述更改时发出警报?

原问题:

我正在尝试为办公室的打印机设置打印配额。然而,当达到配额时,它会出现,打印只是默默地失败,用户不知道发生了什么。

通过更改 /etc/cups/printers.conf 中的 PageLimit 指令设置页面配额

看来我收到了消息

E [04/Mar/2013:15:34:28 -0700] 为 Create-Job 返回 IPP client-error-not-possible (ipp://localhost:631/printers/Hewlett-Packard-HP-LaserJet-4100- MFP)来自本地主机

在我的日志中 /var/log/cups/error_log 。

我尝试通过类似的命令将某些东西组合在一起

`tail -f /var/log/cups/error_log | grep 'client-error-not-possible for Create-Job' DISPLAY=:0 notify-send -t 30000 -i 'notification-message-email' 'Printing Quota reached for this Printer'`
Run Code Online (Sandbox Code Playgroud)

但这似乎并没有真正起作用,因为它只在第一条错误消息上显示一次消息。

任何想法或解决方案?似乎真的应该为此提供一个预先烘焙的解决方案。

解决方案

incrontab 完美运行。

sudo apt-get install incrontab
Run Code Online (Sandbox Code Playgroud)

将 root 用户添加到 /etc/incron.allow

sudo nano /etc/incron.allow
Run Code Online (Sandbox Code Playgroud)

创建脚本 monitorCUPSlog.sh

#!/bin/bash
tail -n 1 /var/log/cups/error_log | grep 'client-error-not-possible' | DISPLAY=:0 notify-send -t 30000 -i 'notification-message-email' 'Daily Print Quota exceeded for this printer'
Run Code Online (Sandbox Code Playgroud)

最后将事件添加到 incrontab 表中

sudo incrontab -e
/var/log/cups/error_log IN_MODIFY /usr/local/bin/monitorCUPSlog.sh
Run Code Online (Sandbox Code Playgroud)

似乎工作,是的。

Sem*_*oor 5

我会考虑使用incrontab来监视对文件系统的更改,并将其与您已有的小脚本结合起来。

这看起来大致如下。

首先,将要执行的脚本另存为文件,例如cups_monitor.sh/usr/local/bin(不要忘记使其可执行)。

#!/bin/sh
VAR=`tail -n 1 /var/log/cups/error_log | grep 'client-error-not-possible for Create-Job'`
if [[ -n "$VAR" ]]; then
   echo "$VAR" | DISPLAY=:0 notify-send -t 30000 -i
fi
Run Code Online (Sandbox Code Playgroud)

你可能想检查一下。我的脚本永远不会第一次尝试:)。另请注意,如果此脚本后跟其他消息,则该脚本可能不会捕获您的错误消息:我只查看日志文件的最后一行 ( -n 1); 这应该很容易改变。

然后编辑你的 incrontab

incrontab -e
Run Code Online (Sandbox Code Playgroud)

通过添加行

/var/log/cups/error_log IN_CLOSE_WRITE /usr/local/bin/cups_monitor.sh
Run Code Online (Sandbox Code Playgroud)

IN_CLOSE_WRITE被称为“事件标志”,并表示要要打电话给你的脚本时/var/log/cups/error_log开放供写入后关闭; 您可以在 incrontab 的手册页中找到其他事件。

请记住,我没有对此进行测试。您可以通过查看系统日志 ( tail /var/log/syslog)来查看 incrontab 文件是否已成功更改以及它是否调用了您的脚本。

(我在 Stack Exchange 上的第一个回答!Yippee!)