我正在尝试为办公室里的打印机设置打印配额。但是,当达到配额时,打印似乎会默默失败,而用户根本不知道发生了什么。
页面配额是通过修改 PageLimit 指令来设置的/etc/cups/printers.conf
我似乎收到了消息
E [04/Mar/2013:15:34:28 -0700] Returning IPP client-error-not-possible for Create-Job
(ipp://localhost:631/printers/Hewlett-Packard-HP-LaserJet-4100-MFP) from localhost
在我的日志中/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'
但这似乎并没有真正起作用,因为它只在第一个错误消息上显示一次消息。
有什么想法或解决方案吗?看来确实应该有一个预先解决此问题的解决方案。
答案1
我会考虑使用定时任务用于监视文件系统的变化,并将其与您已有的小脚本结合起来。
这大致如下所示。首先,将要执行的脚本保存为文件,例如
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
您可能想检查一下。我的脚本第一次尝试总是不正确 :)。还请注意,如果错误消息后面跟着其他消息,则此脚本可能无法捕获您的错误消息:我只查看日志文件的最后一行(
-n 1
);这应该很容易更改。然后编辑你的 incrontab
incrontab -e
通过添加行
/var/log/cups/error_log IN_CLOSE_WRITE /usr/local/bin/cups_monitor.sh
被
IN_CLOSE_WRITE
称为“事件符号”,表示您想要在脚本/var/log/cups/error_log
打开进行写入后关闭时调用它;您可以在 incrontab 的手册页中找到其他事件。请记住,我没有测试过这一点。您可以通过查看 syslog (
tail /var/log/syslog
) 来查看 incrontab 文件是否已成功更改以及它是否调用了您的脚本。