如何显示CUPS打印机作业历史记录?


14

我正在使用lpr命令将某些文件从远程计算机打印到网络打印机。显然可以,但是几分钟后,当我键入lpstat或lpq时,该作业已经消失,它可能已经打印了文件。有没有办法检查打印机队列中我成功完成的作业的历史记录或日志?


当然,我现在无法访问打印机,因此无法检查文件是否已打印。
桑蒂2014年

通过Web界面很容易。
Faheem Mitha 2014年

那是什么,您能再解释一下吗?
桑迪2014年

Answers:


30

是,存在一个程序:lpstat-打印杯子状态信息

$ lpstat -W completed
-W which-jobs
     Specifies which jobs to  show,  completed  or  not-completed  (the
     default).  This option must appear before the -o option and/or any
     printer names, otherwise the default (not-completed) value will be
     used in the request to the scheduler.

或者,如果您愿意通过以下网页

https://localhost:631/printers/[NameOfPrinter]?which_jobs=completed
http://localhost:631/jobs?which_jobs=completed

亲切的问候


3
这只会显示您的用户ID的已完成。您可以提供这样的用户列表:lpstat -W completed -u user1,user2
slm

lpstat是否具有滚动窗口以显示已完成的打印作业历史记录,还是显示所有已完成的作业?
chinnychinchin

5

我认为/var/log/cups/page_log等等具有完成工作的历史。

替代方法是Web界面

http://localhost:631/ 

这也显示完成的工作。我不确定Web界面从哪里获取信息。


4

尝试时的另一个答案如下:

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

添加用户后,saml您将获得该用户的历史记录:

$ 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在此U&L问答中提到的标题是:从命令行查看所有用户的打印作业对我没有任何帮助。

$ 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参数中,如下所示:

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

只是为了表明这可以看到本地的所有用户,您可以像这样获得一个唯一的用户列表:

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

有问题吗?

一个问题是,如果打印到CUPS的用户在本地没有帐户,则不会显示他们。

但是,如果您的目录包含LPD控制文件,则通常为/ var / spool / cups , you'll notice a bunch of control files in there. These files are kept as a result of theMaxJobs设置,未设置时默认为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

参考文献


0

上面的每个答案似乎只对完成的工作感兴趣。

如果您还对用户或管理员取消的作业感兴趣,该怎么办?如果您想知道由于驱动程序或其他问题而导致打印系统自身中止了多少个作业,该怎么办?

对于这些情况,请使用:

lpstat -W all -o

另外,您可能想了解有关每个作业的更多详细信息。在这种情况下,请添加-l长输出格式:

lpstat -l -W all -o

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.