Tomsk Sysadmins Forum
Unix => Администрирование => Topic started by: Xray_Linux_Root on September 22, 2006, 14:18:34
-
Что имеем:
1. Принтсервер на базе Linux. Система печати CUPS.
2. Принтера подключённые по USB.
Совершаемые действия (имитация проблемы):
1. Обесточиваем принтер.
2. Отправляем пару документов на принтсервер на порт выключенного принтера.
3. Подаём питание на обесточенный принтер.
Результат:
Результат печальный. Задания отправленные на печать в момент отключения принтера остаются в спуле и ничего не происходит, т.к. CUPS оставляет состояние принтера в режиме ожидания.
1. Если после этого всего перезагрузить сервер печати состояние принтера в CUPS не изменится.
2. Если состояние принтера в CUPS изменить вручную (в вэб-интерфейсе нажать кнопку "Start Printer"), то он без проблем отпечатает все задания находящиеся на тот момент в спуле системы печати.
3. Если запретить изменение файла /etc/cups/printers.conf, то принтер возвращается в рабочий режим после перезагрузки демона cups.
Выводы:
При каждом отключении питания принтеров приходится вручную менять статус всех принтеров, что не есть хорошо.
Требуется:
Система должна работать полностью автономно (без какого либо вмешательства пользователя или администратора).
Вопрос:
Как можно средствами CUPS сделать, чтобы статус принтера (в системе печати CUPS) менялся автоматически на рабочий при изменении состояния самого принтера?
-
Самый простой вариант - не выключать принтеры вообще
Если принтеры типа HP 24xx и подобные - они могут переходить в спящий режим и предназначены для постоянного включения.
Вариант второй - можно попробовать покапаться в реализации горячего включения по USB и ловить моменты отключения и включения устройств соответственно (об этом должно в логах писаться) и в момент включения делать переинициализацию устройств и cups, а в момент отключения корректное отключение устройства.
Ну и полседний вариант, если принтеры могут держать lpt, то можно взять JetDirect rfrой-нибудь и посдить их на них (хотя сейчас возможно есть usb-шные JetDirectы)
-
Самый простой вариант - не выключать принтеры вообще
Если принтеры типа HP 24xx и подобные - они могут переходить в спящий режим и предназначены для постоянного включения.
Если принтера гасились раньше, они по инерции будут гасится и дальше. Ну и плюс сюда же внештатное отключение электроэнергии (т.к. фазы разные и один выбитый автомат обесточит принтера, но не клиентов - к примеру).
Вариант второй - можно попробовать покапаться в реализации горячего включения по USB и ловить моменты отключения и включения устройств соответственно (об этом должно в логах писаться) и в момент включения делать переинициализацию устройств и cups, а в момент отключения корректное отключение устройства.
Этот вариант тоже изучаю.
Ну и полседний вариант, если принтеры могут держать lpt, то можно взять JetDirect rfrой-нибудь и посдить их на них (хотя сейчас возможно есть usb-шные JetDirectы)
А теперь самый смешной ответ! Принтсервер на базе Linux был установлен (планируется ещё n-цать поставить) на смену принтсерверу D-Link DP-300+ в виду постоянного переполнения буфера портов принтсервера (и соответсвенно постоянных отказов последнего). Всё это включая покупку DP-300+ и установку и настройку принтсервера на базе Linux в организации сделали в целях экономии денег, и для развлечения IT-подразделений
Так что я думаю JetDirect в этой конторе вряд ли когда появится.
Временное решение
Пока повесил в cron скрипт, на время разбирательства, вида:
#!/bin/sh
#
# Константы
# # # #
CUPS_ENABLE="/usr/bin/enable"
CUPS_LPSTAT="/usr/bin/lpstat"
LPSTAT_OPT="-a"
AWK="/bin/awk"
#
# Динамические переменные
# # # #
CUPS_PRINTERS=`$CUPS_LPSTAT $LPSTAT_OPT | $AWK '{print $1}'`
#
# Вычисления
# # # #
for all_prn in $CUPS_PRINTERS; do
$CUPS_ENABLE $all_prn
done
Прочтение документации по адресу http://printserver:631/documentation.html (http://printserver:631/documentation.html) пока особых результатов не принесло.
Так что вопрос по прежнему в силе
-
Проблема решилась.
Дело в том, что принтера создавались при помощи вэб-интерфейса, а работает он очень интересно. Если принтера были подключены до запуска демона CUPS то мастер подставляет в поле не путь_имя_устройства, а имя принтера.
Т.е. вместо секции конфигурации принтера вида:
<Printer Canon_LBP-810>
Info Canon LBP-810
Location Бухгалтерия
DeviceURI usb:/dev/usb/lp0
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>
мы имеем:
<Printer Canon_LBP-810>
Info Canon LBP-810
Location Бухгалтерия
DeviceURI usb://Canon/LBP-810e�
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
</Printer>
Отредактировав все конфигурации вручную приведя их к виду:
. . .
DeviceURI usb:/dev/usb/lp0
. . .
я попробовал имитировать описанную в самом начале проблему. У меня этого не получилось, т.е. принтера так ни разу и не остановились. После выключения принтера и отправки на него тестовых страниц он нормально начинал работать, стоило его только включить.
-
Хм... Интересно было об это узнать - сам с таким не сталкивался, хотя один принтер у нас дурит (правда админом не я там на линухе). Теперь буду знать в случае чего...