Назад | Перейти на главную страницу

CUPS: сообщение «Слишком много открытых файлов»

У меня есть небольшой сервер Linux (Ubuntu Server, 12.04 LTS), который служит сервером печати. По сути, я определил принтер CUPS и добавил Option job-hold-until indefinite к записи в printers.conf, чтобы гости библиотеки могли оплачивать распечатки наличными, а кто-нибудь за столом может щелкнуть «Release Job» в веб-интерфейсе CUPS, чтобы отправить его на принтер.

Проблема в том, что периодически веб-интерфейс CUPS перестает отвечать. Журнал ошибок заполнится такими сообщениями:

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

Основная часть сообщений связана с файлами, которые связаны с шифрованием SSL для веб-интерфейса. Кажется, что он открывает их, а затем никогда не закрывает, пока не начнет выдавать ошибку «Слишком много открытых файлов».

Для этого нам действительно не нужно SSL-шифрование. Он уже огорожен IP-адресами для компьютеров персонала внутри здания. Поэтому в первый раз, когда это произошло, я попытался полностью отключить SSL, добавив DefaultEncryption Never в cupsd.conf. Сейчас мы можем получить доступ к веб-интерфейсу без SSL, но проблема все равно повторилась сегодня утром.

Итак ... как мне убедить CUPS 1) закрыть файлы, когда это будет сделано с ними, или Б) не открывать их вообще?

Дальнейшие исследования показали, что эта проблема была вызвана AppArmor, механизмом безопасности Ubuntu. Это мешало обычному доступу CUPS, и CUPS не знал, что с этим делать. Чтобы решить проблему, я отключил профиль CUPS в AppArmor:

sudo ln -s /etc/apparmor.d/usr.sbin.cupsd /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.cupsd