Linux, CUPS: повторная печать задания

Иногда требуется повторно распечатать задание — например, если оно ушло на печать, но в действительности не было распечатано по причине зависания принтера или принт-сервера. В рамках CUPS это решается достаточно просто.

Прежде всего, в cupsd.conf нужно настроить два параметра — сохранение отправленных на печать заданий:

PreserveJobFiles    Yes

и максимальное количество хранимых заданий:

MaxJobs    1000

После этого перезапускаем сервис:

service cups restart

Самый простой вариант — воспользоваться web-интерфейсом (http://localhost:631/jobs?which_jobs=completed) и нажать кнопку «Restart Job».

Если же мы пользуемся командной строкой, нужно посмотреть /var/log/cups/page_log и найти в нем номер интересующего задания. Строка лога выглядит приблизительно так:

printer user 115221 [05/May/2010:16:51:15 +0400] 1 1 - localhost

Номер задания в данном случае — 115221. Пишем следующую команду:

lp -i 115221 -H restart

И задание будет распечатано. Можно написать небольшой скрипт, чтобы перезапускать сразу несколько заданий, разделяя их номера пробелами:

#!/bin/bash
# Restart completed print jobs
# Usage: rstjob [job num 1] [job num 2] ...
for N in "$@"
do
  lp -i ${N} -H restart
done

Сами задания хранятся в /var/spool/cups. См. также man lp.