ADG Оставить заявку
Блог Системное администрирование 5 мин чтения

Зависший спулер в отчётный период: как не дать одной задаче задушить печать

Бухгалтерия встала в отчётный период из-за зависшей очереди печати. Как диагностировать спулер, чистить застрявшие задания и настроить печать так, чтобы одна кривая задача не блокировала всё.

Контекст момента

сетевые принт-серверы - массовый инструмент офисной печати

Звонок пришёл в середине дня, примерно за неделю до сдачи квартального отчёта. В бухгалтерии не печатает ни один принтер. Совсем. Четыре машины, два сетевых принтера на принт-сервере, ни один документ не выходит. Люди сидят и смотрят на экраны со статусом «печать», а из принтеров - тишина.

Это тот редкий случай, когда «не работает печать» означает буквально паралич отдела. Бухгалтеры не могут без бумаги: счета, акты, платёжки - всё нужно на руках. Приехали.

Что застряло и где

Первым делом - смотреть спулер на принт-сервере. Принт-сервер у клиента был отдельной машиной на Windows 2000 Server, к которой по сети подключены оба принтера. Открываем очередь на сервере: там висит задание, отправленное два часа назад. Статус - «печать». Принтер его не получает, следующие задания за ним не проходят. Классика.

Пробуем удалить задание через оснастку - не удаляется. Висит и молчит. Это означает, что оно уже не в очереди управляющей программы, оно ушло в спулер на уровне службы, и там застряло.

Порядок действий, который работает:

  • Первое - остановить службу спулера. В Windows это net stop spooler из командной строки или через Пуск - Администрирование - Службы. Всё равно ничего не печатается, хуже не будет.
  • Второе - открыть папку C:\WINDOWS\system32\spool\PRINTERS и удалить там все файлы. Это физические файлы заданий: .SPL - само задание, .SHD - теневой файл с метаданными. Пока служба стоит, они мёртвые, удаляются без проблем.
  • Третье - поднять службу обратно: net start spooler.
  • Четвёртое - проверить очередь: должна быть пуста.

Сделали - встало. Попросили бухгалтеров попробовать. Задания пошли, принтер ожил.

Откуда берётся застрявшее задание

Это вопрос, который мы задаём каждый раз, чтобы не возвращаться к тому же через неделю.

Чаще всего виновник - документ с кривым форматированием или битый файл, который драйвер принтера не смог переварить. Спулер начинает обрабатывать задание, буксует и зависает. Следующие задания встают в очередь за ним и ждут, пока первое не завершится - а оно не завершится никогда.

В этот раз выяснили: один из бухгалтеров пытался напечатать таблицу Excel с нестандартным шрифтом, которого на принт-сервере не было. Драйвер споткнулся, задание зависло, очередь встала. Шрифт скопировали на сервер, больше такого не случалось - но вывод шире: любой документ может стать такой миной.

Как сделать так, чтобы одно задание не роняло всё

Самая болезненная часть проблемы не в том, что очередь зависла, а в том, что она унесла с собой печать всего отдела. Есть несколько настроек, которые это смягчают.

Разделить принтеры по назначению. Если у бухгалтерии один принтер для всего - одно зависшее задание парализует всех. Когда принтеров два и они логически разделены (один для договоров и актов, другой для внутренних документов), одна зависшая очередь не останавливает работу полностью. У клиента принтеры были, но настроены как взаимозаменяемые - переключили модель, и у каждого отдела теперь есть приоритетный.

Поставить таймаут передачи задания. В свойствах принтера на сервере есть параметр - через сколько секунд считать передачу задания неуспешной. По умолчанию он либо огромный, либо вообще не выставлен. Мы ставим 120-180 секунд. Если за это время принтер не принял задание, оно помечается ошибкой и не блокирует следующие.

Логи спулера включить. По умолчанию Windows не пишет события спулера в журнал, и когда всё ломается, ничего не понятно. В настройках печати на сервере можно включить ведение журнала ошибок спулера - тогда хотя бы видно, в какой момент и на каком задании всё встало. Без этого управлять нечем.

Проверить, что шрифты и ресурсы документов есть на сервере. Если пользователи работают с документами, где используются нестандартные шрифты, эти шрифты должны быть установлены на принт-сервере. Без этого драйвер будет спотыкаться на таких заданиях снова и снова.

Про сетевую схему в целом

У клиента принт-сервер - отдельная машина, и это разумно для офиса с несколькими принтерами и десятком пользователей. Когда принтер подключён напрямую к рабочей станции кого-то из сотрудников и расшарен на отдел, при выключении этой станции печать пропадает у всех. Нормальная сетевая инфраструктура предполагает, что серверные роли не висят на пользовательских машинах.

Принт-сервер не требует дорогого железа: любая машина с Windows 2000 Server тянет десятки принтеров и сотни заданий в день без напряжения. Главное - чтобы это была выделенная роль, а не совмещённая с чем-то ещё. Когда спулер падает, ему перезапуск нужен быстро и без осторожностей, а если на той же машине крутится что-то важное, перезапуск службы становится процедурой с согласованиями.

Бухгалтерия в тот день доделала свои документы к вечеру. Отчёт сдали. Инцидент занял от звонка до первого напечатанного листа - чуть меньше часа, половину из которых мы ехали. Сама чистка спулера и проверка - пятнадцать минут. Время, которое потеряли люди, пока ждали, - несопоставимо больше.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.