我有一台小型 Linux 服务器(Ubuntu Server,12.04 LTS),用作打印发布服务器。本质上,我定义了一台 CUPS 打印机,并将其添加到了Option job-hold-until indefinite
Printers.conf 中的条目中,以便图书馆的客人可以用现金购买打印件,而服务台的某个人可以在 CUPS Web 界面中单击“发布作业”将其发送到打印机。
问题是 CUPS Web 界面会定期停止响应。错误日志中会充满如下消息:
E [10/Sep/2013:13:28:04 -0500] Unable to create certificate file /var/run/cups/certs/0 - Too many open files
E [10/Sep/2013:13:28:04 -0500] [CGI] Unable to create pipe for /usr/lib/cups/cgi-bin/jobs.cgi - Too many open files
E [10/Sep/2013:13:28:04 -0500] Unable to create certificate file /var/run/cups/certs/0 - Too many open files
大部分消息都与与 Web 界面的 SSL 加密有关的文件有关。它似乎打开了这些文件,然后从未关闭它们,直到它开始遇到“打开文件过多”错误。
我们实际上并不需要 SSL 加密。防火墙已经将 IP 限制在大楼内员工计算机的范围内。因此,第一次发生这种情况时,我尝试通过添加到DefaultEncryption Never
cupsd.conf 来完全禁用 SSL。现在我们可以在没有 SSL 的情况下访问 Web 界面,但问题今天早上又出现了。
那么...我该如何说服 CUPS 1) 在处理完文件后关闭文件,或者 B) 一开始就不打开它们?
答案1
进一步的研究表明,这个问题是由 Ubuntu 安全机制 AppArmor 引起的。它干扰了 CUPS 的正常访问,而 CUPS 不知道该怎么做。为了解决这个问题,我在 AppArmor 中禁用了 CUPS 配置文件:
sudo ln -s /etc/apparmor.d/usr.sbin.cupsd /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.cupsd