У нас есть машина Redhat (2.6.9-42.ELsmp), на которой работает CUPS. Время от времени люди отправляют на принтер большие файлы, и он застревает, поэтому они перезапускают принтер. После 300 секунд отсутствия ответа принтер становится недоступным. После этого CUPS удалит принтер из списка доступных принтеров и больше никогда не попытается его выполнить.
Можно ли как-нибудь настроить его так, чтобы CUPS пытался поговорить с принтером, чтобы повторно добавить его в список, когда принтер снова будет в сети?
Мы «решаем» эту проблему каждый раз, когда это происходит, мы вручную изменяем файл printers.conf, меняем статус принтера на «Idle», а затем перезапускаем службу. Я уверен, что это лучше, не так ли?
Спасибо,
Там.
Это следует исправить, изменив ErrorPolicy в cupsd.conf или printers.conf:
CUPS 1.3 / Mac OS X 10.5ErrorPolicy
Примеры
ErrorPolicy abort-job
Повторное задание ErrorPolicy
ErrorPolicy стоп-принтер
Описание
Директива ErrorPolicy определяет политику по умолчанию, которая используется, когда серверная часть не может отправить задание печати на принтер. [...]
Видеть: http://www.cups.org/doc-1.4/ref-cupsd-conf.html#ErrorPolicy
По умолчанию:
stop-printer - Остановите принтер и сохраните задание для будущей печати
однако вы, вероятно, захотите:
retry-job - Повторяет задание после ожидания N секунд [...]
(или, может быть, повторить это задание).
Примечание. В CUPS V1.4 + это называется FatalErrors.
Решить вашу проблему можно по-разному, в зависимости от используемой вами версии CUPS.
Кроме того, это зависит от того, как именно очередь печати сервера CUPS подключается к реальному устройству печати: ipp: // ?, socket: // ?, lpd: //?
Больше последние версии CUPS поставляются со встроенными функциями, которые могут здесь помочь. Это называется «ErrorPolicy». Его настройка по умолчанию выбрана в cupsd.conf и определяет, как cupsd должен обрабатывать очереди печати, которые не работают должным образом. У вас есть 4 варианта: установить по умолчанию или пометить каждую очередь отдельно:
ErrorPolicy abort-job
ErrorPolicy retry-job
ErrorPolicy retry-this-job
ErrorPolicy stop-printer
Кроме того, вы можете установить отдельные ErrorPolicies для каждой отдельной очереди печати. Этот параметр будет отмечен в файле printers.conf. (Установите его из командной строки с помощью lpadmin -p printername -o printer-error-policy=retry-this-job
).
Для старые версии CUPS Я бы порекомендовал взглянуть на beh
, КУБОК BackEnd обработчик. 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, lpadmin
, cupsenable
или sudo
для повторной активации очередей CUPS, которые беспорядочно падают.
Вы можете просто использовать команду «enable» от имени пользователя root (или другой учетной записи администратора cups). Если это случается слишком часто, добавьте небольшой crontab с помощью «lpstat -a», чтобы найти отключенные принтеры.