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

Задания застряли в очереди печати на сервере печати

У меня есть машина Server 2003, выступающая в качестве сервера печати примерно для 20 принтеров. У нас возникли проблемы с 1 принтером, и у него в очереди 104 документа.

Я попытался отменить все документы и безуспешно пытался вручную отменить отдельные документы.

Задания печати имеют статус «Удаление - Отправлено на принтер» под своим статусом. Он находится в таком состоянии около 2 часов.

Я не верю, что перезапуск спула - это вариант, не влияющий на другие принтеры, и у нас есть принтер Hold для определенного приложения, не поддерживающего печать в Windows, в котором я не могу потерять задания.

Отказ от службы диспетчера очереди печати - единственный жизнеспособный выбор, о котором я знаю. По моему опыту, некоторые задания "застревают" в очереди настолько "сильно", что требуется остановить сервер диспетчера очереди печати, очистить файлы, представляющие задания, из папки% SystemRoot% \ System32 \ Spool \ Printers и перезапустить служба диспетчера очереди печати.

Вы не потеряете никакие задания, которые уже поставлены в очередь для других принтеров, отскочив от службы диспетчера очереди печати (вы можете продемонстрировать это самостоятельно на другом сервере или клиенте - приостановите принтер, поместите некоторые задания в очередь и остановите / перезапустите spooler serivce), но если вы обнаружите, что вам нужно пойти по пути удаления файлов заданий из каталога спула, вам будет сложно найти их среди других буферных файлов для заданий, которые вы собираетесь сохранить.

(Кстати: Microsoft могла бы много расширения службы диспетчера очереди печати, IMO, чтобы облегчить ситуации, которые вы видите. Служба диспетчера очереди печати в последние несколько выпусков Windows оставалась в состоянии относительно небольшого улучшения. Печать - это не сексуально, но часто критично для бизнеса.)

Редактировать:

Каждое задание печати представлено в каталоге спула файлом «.SPL» (содержащим данные задания на печать в формате EMF или raw) и соответствующим файлом «.SHD», содержащим информацию «заголовка» о задании. Этот файл информации заголовка содержит сведения о том, на какой принтер отправляется задание.

Удаление соответствующей пары файлов «SPL» и «SHD» для данного задания на печать эффективно удаляет это задание.

К сожалению, формат файла ".SHD" официально не документирован (см. http://www.undocprint.org/formats/winspool/shd для некоторой реконструированной документации), поэтому выяснить, «какой файл является каким» в каталоге спула и удалить только «поврежденные» задания на печать, в лучшем случае очень сложно. Из того, что я вижу, имя целевой очереди печати находится в этом файле "SHD" в виде строки uncode, поэтому я полагаю, что можно было бы сколотить сценарий, используя строки инструментов командной строки, строки "strings" и "findstr", чтобы пресмыкаться через все файлы ".SHD", чтобы найти задания, предназначенные для "проблемного" принтера, и удалить их, не затрагивая задания, привязанные к другим принтерам.

Любые манипуляции с файлами буферизации должны выполняться при остановленной службе диспетчера очереди печати, потому что во время ее работы файлы заблокированы.

Перезапуск диспетчера очереди печати обычно не прерывает задания на печать, а просто прекращает прием новых. Конечные пользователи заметят, но это будет не так плохо, как молча бросить задание на печать. В общем, я бы сказал, что перезапускать службу на лету безопасно.

Что еще более важно, я хотел поделиться этим с вами:

Иногда я сталкивался с поврежденным заданием на печать в очереди принтера. В тех случаях я заметил

а. Диспетчер очереди печати не будет запускаться, пока присутствует поврежденное задание на печать и целевой принтер включен.
б. диспетчер очереди печати не позволит вам удалить поврежденное задание через графический интерфейс, если диспетчер очереди печати остановлен
c. принтер не будет печатать другие задания, пока поврежденное задание не будет завершено или удалено.

Чтобы исправить это, вам нужно

  1. Физически выключите принтер
  2. запустить / перезапустить диспетчер очереди печати
  3. удалить поврежденное задание на печать
  4. включи принтер

Если вы не сделаете 1-4 именно в таком порядке, вы застрянете в бесконечном цикле борьбы с a-c.

Я не могу обещать вам, что ваша ситуация соответствует этому опыту, но я думаю, что стоит рассмотреть наблюдаемое поведение и последствия для того, как процесс печати / спулинга распечатывает вещи.

edit: В противоположность тому, как Эван манипулирует файлами спула. Вы можете использовать очередь печати в Windows (запуск - настройки - принтеры или запуск - принтеры) и удалить задание из очереди печати, используя меню «Документ» - параметр «Отмена».

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