Linux CUPS 自动重新添加打印机?

Linux CUPS 自动重新添加打印机?

我们有一台运行 CUPS 的 Redhat 机器 (2.6.9-42.ELsmp)。有时,人们会向打印机发送大文件,然后打印机卡住了,因此他们重新启动打印机。打印机 300 秒后没有响应,打印机将变为不可用。然后 CUPS 会将打印机从可用打印机列表中删除,并且不会再尝试。

我是否可以进行任何设置,以便每当打印机再次上线时,CUPS 都会尝试与打印机通信并将其重新添加到列表中?

我们“解决”这个问题的方法是,每次发生这种情况时,我们都会手动修改 Printers.conf 文件,将打印机状态更改为“空闲”,然后重新启动服务。我相信有更好的办法,不是吗?

谢谢,

谭。

答案1

应该通过更改 cupsd.conf 或 Printers.conf 中的 ErrorPolicy 来解决此问题:

CUPS 1.3/Mac OS X 10.5错误政策

例子

ErrorPolicy 中止作业

ErrorPolicy 重试作业

错误策略停止打印机

描述

ErrorPolicy 指令定义了当后端无法向打印机发送打印作业时使用的默认策略。[...]

看:http://www.cups.org/doc-1.4/ref-cupsd-conf.html#ErrorPolicy

默认值为:

stop-printer - 停止打印机并保留作业以供将来打印

但是你可能想要:

retry-job - 等待 N 秒后重试作业 [...]

(或者可能重试这项工作)。

注意:在 CUPS V1.4+ 上,它被称为 FatalErrors。

答案2

根据您所运行的 CUPS 版本,您可以用不同的方法来解决您的问题。

另外,这取决于 CUPS 服务器打印队列如何具体连接到实际打印设备:ipp://?、socket://?、lpd://?

更多的CUPS 的最新版本带有一个可以提供帮助的内置功能。它被称为“ErrorPolicy”。它的默认设置在 cupsd.conf 中选择,并确定 cupsd 应如何处理未按预期运行的打印队列。您有 4 个选项可以设置为默认值或单独标记到每个队列:

ErrorPolicy abort-job  
ErrorPolicy retry-job  
ErrorPolicy retry-this-job  
ErrorPolicy stop-printer  
中止工作
-- 中止此作业并继续执行同一队列中的下一个作业
重试作业
-- 等待 N 秒后重试此作业(其中 N 由以下因素决定:cupsd.conf的“JobRetryInterval”指令)。
重试这个工作
——立即无限期地重试当前作业。
停止打印机
-- 停止当前打印队列并保留作业以供将来打印。这仍然是默认设置,除非您按照上述替代方案另行定义。它也是 CUPS 以前版本中所有队列的默认 + 唯一可能的行为(根据您的问题,您确实想摆脱该队列)。

此外,您可以为每个单独的打印队列设置单独的 ErrorPolicies。此设置将在 Printers.conf 文件中注明。(使用 命令行进行设置lpadmin -p printername -o printer-error-policy=retry-this-job)。


为了旧版本的 CUPS我建议你看一下behCUPS后端处理程序.beh是一个可应用于任何 CUPS 后端的包装器。

假设您的打印队列当前已定义后端socket://192.168.1.111:9100,并且其行为方式您不喜欢(由于网络连接问题,cupsd 有时会禁用它)。beh您可以像这样重新定义后端:

beh:/0/20/120/socket://192.168.1.111:9100

这将以两分钟为间隔重试 20 次作业,并且仅在仍未成功时禁用队列。或者您可以这样做:

beh:/1/3/5/socket://192.168.1.111:9100

这将重试该作业 3 次,每次尝试之间间隔 5 秒。如果该作业仍然失败,则将其丢弃,但不会禁用队列。您想让 cupsd 无限期地尝试连接到设备吗?好的,试试这个:

beh:/1/0/30/socket://192.168.1.111:9100

不断尝试,直到打印机恢复。连接尝试间隔为 30 秒。打印机关闭时作业不会丢失。只需关闭打印机即可有意延迟打印。对于台式打印机和/或家庭用户来说,这是一种很好的配置。


总的来说,没有必要摆弄 bash 脚本、cron 作业,lpadmincupsenable为了sudo重新激活不稳定的 CUPS 队列。

答案3

您可以简单地以 root(或其他 cups 管理员帐户)身份使用“enable”命令。如果这种情况发生得太频繁,请添加一个小型 crontab,使用“lpstat -a”找出已禁用的打印机。

相关内容