我正在使用 lpr 命令将一些文件从远程计算机打印到网络打印机。它显然有效,但几分钟后,当我输入 lpstat 或 lpq 时,该作业已经消失,它可能已经打印了文件。有没有办法检查打印机队列中成功完成的作业的历史记录或日志?
答案1
是的,存在一个程序: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
亲切的问候
答案2
尝试时的另一个答案产生以下结果:
$ 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 the
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
参考
答案3
我认为/var/log/cups/page_log
etc.有完成工作的历史。
另一种选择是网络界面
http://localhost:631/
它还显示已完成的作业。我不确定网络界面从哪里获取信息。
答案4
如果您想查看其他用户的作业,那么出于某种原因指定-u
没有值的工作(至少在我的系统上):
lpstat -W completed -u