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

我们有一个运行CUPS的Redhat机器(2.6.9-42.ELsmp)。 偶尔,人们会将大文件发送到打印机,然后卡住,重新启动打印机。 300秒后没有响应,打印机变得不可用。 然后,CUPS将从可用的打印机列表中删除打印机,而不再尝试它。

无论如何,我可以设置它,这样CUPS将尝试与打印机交谈,无论打印机何时再次联机,都将其重新添加到列表中。

我们“解决”的方式是每次发生时,我们手动修改printers.conf文件,将打印机状态更改为“空闲”,然后重新启动服务。 我相信有这样做更好,不是吗?

谢谢,

担。

这应该通过更改cupsd.conf或printers.conf中的ErrorPolicy来解决:

CUPS 1.3 / Mac OS X 10.5ErrorPolicy

例子

ErrorPolicy中止作业

ErrorPolicy重试作业

ErrorPolicy停止打印机

描述

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

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

默认是:

停止打印机 – 停止打印机并保留作业以备将来打印

不过你可能想要:

retry-job – 等待N秒后重试该作业[…]

(或者可能再试这个工作)。

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

你的问题可以通过不同的方式来解决,这取决于你正在运行的CUPS的版本。

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

更新的版本的CUPS来与内置的function,可以在这里帮助。 这就是所谓的“ErrorPolicy”。 在cupsd.conf中select默认设置,并确定cupsd应如何处理不按预期行为的打印队列。 您有4个选项可以设置为默认值或单独标记到每个队列:

ErrorPolicy abort-job ErrorPolicy retry-job ErrorPolicy retry-this-job ErrorPolicy stop-printer 
中止作业
– 中止这个工作,并继续在同一队列中的下一个工作
重试作业
– 等待N秒后重试此作业(其中N由cupsd.conf的“JobRetryInterval”指令确定)。
重试此作业
– 立即无限期重试当前工作。
停止打印机
– 停止当前的打印队列并保留作业供将来打印。 这仍然是默认的,除非你根据上面提到的select另外定义它也是默认+只有在以前版本的CUPS中的所有队列可能的行为(你希望摆脱你的问题)。

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

对于旧版本的CUPS,我build议看一下CUPS 后端处理程序beh是一个可以应用于任何CUPS后端的包装器。

假设你的打印队列目前已经定义了socket://192.168.1.111:9100的后端socket://192.168.1.111:9100 ,它的行为方式你不喜欢(由于networking连接问题而不时被cupsd禁用)。 用beh你可以像这样重新定义你的后端:

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

这将以两分钟的时间间隔重试一次作业20次,并且只有在还没有成功时才禁用队列。 或者你可以这样做:

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

这两次尝试之间的5秒延迟重试该工作3次。 如果作业仍然失败,它将被丢弃,但队列不会被禁用。 你想让cupsd无限期地尝试连接到设备? 好,试试这个:

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

无限尝试,直到打印机回来。 连接尝试之间的时间间隔是30秒。 打印机closures时作业不会丢失。 您可以通过closures打印机来故意延迟打印。 桌面打印机和/或家庭用户的良好configuration。

总的来说,没有必要乱用bash脚本,cron作业, lpadmincupsenablesudo ,以重新激活CUPS队列不断下滑。

您可以简单地使用“启用”命令作为根(或其他杯子pipe理员帐户)。 如果真的出现这种情况,请使用“lpstat -a”添加一个小型的crontab来查找禁用的打印机。