Задания застряли в очереди на печать на сервере печати
У меня есть сервер Server 2003, выполняющий роль сервера печати для примерно 20 принтеров. Есть 1 принтер, с которым у нас проблемы, и в его очереди 104 документа.
Я попытался "Отменить все документы" и попытался вручную отменить отдельные документы, но безуспешно.
Задания на печать устанавливают "Удаление - Отправлено на принтер" под своим статусом. Это было в этом состоянии около 2 часов.
Я не верю, что перезапуск катушки - это вариант, не влияющий на другие принтеры, и у нас есть режим "Удерживать принтер" для определенного приложения, не поддерживающего печать Windows, для которого я не могу потерять задания.
2 ответа
Перезапуск диспетчера очереди печати обычно не сбрасывает задания на печать, он просто прекращает принимать новые. Конечные пользователи заметят, но это будет не так плохо, как тихое удаление задания на печать. В общем, я бы сказал, что безопасно перезапустить сервис на лету.
Более того, я хотел поделиться этим с вами:
Иногда у меня был опыт работы с поврежденной печатью в очереди на печать. В этих случаях я заметил
а. Диспетчер очереди печати не будет запущен, пока есть поврежденное задание на печать и целевой принтер включен
б. диспетчер очереди печати не позволит вам удалить поврежденное задание через графический интерфейс, если диспетчер очереди остановлен
с. принтер не будет распечатывать другие задания, пока поврежденное задание не будет завершено или удалено.
Чтобы исправить это, вы должны
- Физически выключить принтер
- запустить / перезапустить диспетчер очереди печати
- удалить поврежденное задание на печать
- включить принтер
Если вы не сделаете 1-4 именно в таком порядке, вы застрянете в бесконечном цикле, борясь с AC.
Я не могу обещать вам, что ваша ситуация соответствует этому опыту, но я думаю, что стоит рассмотреть наблюдаемое поведение и последствия того, как процесс печати / печати наматывает руки на вещи.
редактировать: в противоположность принять Эван манипуляции с файлами спула. Вы можете использовать очередь печати в 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" в виде строки без кода, поэтому я предполагаю, что можно было бы собрать скрипт, используя инструменты командной строки "strings" и "findstr", чтобы расточить через все файлы ".SHD" найти задания, предназначенные для "проблемного" принтера, и удалить их, оставив нетронутыми задания, привязанные к другим принтерам.
Любые манипуляции с файлами спула должны выполняться с остановленной службой спулера, потому что во время работы файлы заблокированы.