Метка времени представления для CUPS печатает задания

Не делай этого. Это очень плохая идея - пытаться воспроизвести то, что делают шаблоны включения / исключения rsync, без использования rsync. Тот факт, что некоторые из шаблонов могут быть сложными, является еще большей причиной не пытаться это сделать. Используйте сам rsync, чтобы гарантировать последовательное поведение и минимизировать неожиданности.

На странице руководства rsync:

- existing, --ignore-non-existing

  Это указывает rsync пропустить создание файлов (включая каталоги)
  которые еще не существуют в пункте назначения.  Если эта опция
  в сочетании с параметром --ignore-existing файлы не будут
  обновлено (что может быть полезно, если все, что вы хотите сделать, это удалить
  посторонние файлы).
 

Таким образом, вы должны запустить с --delete --delete-excluded --ignore-existing --ignore-non-existing, и rsync удалит посторонние файлы, а не обновит и не удалит какие-либо другие файлы.

1
08.10.2014, 02:46
2 ответа

Я нашел на сайте U&L следующие 2 вопроса, которые, похоже, дают намёки на возможный способ сделать это. Эти 2 вопроса:

Похоже, что вы можете использовать lpstat, чтобы получить то, что вам нужно. Я заметил, что могу выполнить эту команду:

$ sudo lpstat -W completed
mfc-8480dn-1652         root              1024   Tue 28 Jan 2014 01:19:34 AM EST

И эту:

$ sudo lpstat -W completed -u saml | head -2
mfc-8480dn-1524         saml             23552   Thu 28 Nov 2013 10:45:44 AM EST
mfc-8480dn-1526         saml            699392   Sat 30 Nov 2013 10:34:34 AM EST

Но -u all ничего не сделал для меня.

$ sudo lpstat -W completed -u all | head -2
$

Любопытно, что я мог сделать это:

$ sudo lpstat -W completed -u saml,root | head -3
mfc-8480dn-1524         saml             23552   Thu 28 Nov 2013 10:45:44 AM EST
mfc-8480dn-1526         saml            699392   Sat 30 Nov 2013 10:34:34 AM EST
mfc-8480dn-1652         root              1024   Tue 28 Jan 2014 01:19:34 AM EST

Так что одним из хакерских способов сделать это было бы формализовать список пользователей вашей системы, а затем добавить это в качестве подкоманды к аргументу -u типа so:

$ sudo lpstat -W completed -u $(getent passwd | \
    awk -F: '{print $1}' | paste -sd ',')

Просто чтобы показать, что это видит всех пользователей локально, вы можете получить уникальный список пользователей типа so:

$ sudo lpstat -W completed -u $(getent passwd | \
    awk -F: '{print $1}' | paste -sd ',') | awk '{print $2}' | sort -u
ethan
root
sam
tammy

Issues?

Одна из проблем с этим заключается в том, что если пользователь, печатающий на CUPS, не имеет учетной записи локально, то он не будет отображен.

Но если у вас есть каталог, содержащий управляющие файлы системы LPD, обычно это /var/spool/cups, то вы заметите там кучу управляющих файлов. Эти файлы хранятся в результате настройкиMaxJobs', которая по умолчанию равна 500, когда отменяется.

$ sudo ls -l /var/spool/cups/ | wc -l
502

Другой источник имён пользователей?

Если вы посмотрите на эти файлы, то заметите, что они содержат имена пользователей, а не только учётные записи, присутствующие в системе.

$ strings /var/spool/cups/* | grep -A 1 job-originating-user-name | head -5
job-originating-user-name
tammyB
--
job-originating-user-name
tammyB

Таким образом, мы можем выбрать все записи, которые содержат имя пользователя, а затем B.

$ sudo strings /var/spool/cups/* | grep -A 1 job-originating-user-name | \
    grep -oP '.*(?=B)' | sort -u
ethan
guest-AO22e7
root
sam
saml
slm
tammy

Этот список можно адаптировать так же, как мы изначально использовали, чтобы взять список пользователей из getent passwd, например:

$ sudo lpstat -W completed -u $(strings /var/spool/cups/* | \
    grep -A 1 job-originating-user-name | \
    grep -oP '.*(?=B)' |sort -u | paste -sd ',') 
mfc-8480dn-1525         tammy           545792   Thu 28 Nov 2013 01:36:59 PM EST
mfc-8480dn-1526         saml            699392   Sat 30 Nov 2013 10:34:34 AM EST
mfc-8480dn-1652         root              1024   Tue 28 Jan 2014 01:19:34 AM EST
mfc-8480dn-1672         saml              1024   Sun 09 Feb 2014 01:56:26 PM EST

References

1
27.01.2020, 23:52

У меня есть другой, возможно, более простой подход к очистке старых заданий на печать. Вместо того, чтобы найти способ конвертировать сокращенные отметки времени в заданиях печати, проще использовать команду find для выполнения задачи удаления старых заданий печати, соответствующих определенным критериям. Например, если вы хотите найти задания на печать старше 4 дней:

find /var/spool/cups -name "*-001" -mtime +4

Все активные задания на печать в чашках имеют файлы в / var / spool / cups с расширением -001 . После этого остается лишь использовать ваш любимый инструмент для работы со строками, чтобы получить из вывода фактический номер задания на печать.

0
27.01.2020, 23:52

Теги

Похожие вопросы