正在构建一个脚本来查明服务器列表上次完全更新的时间yum update
。
我可以通过 a 找到它history |grep "yum update"|head -n 1
,但问题是用户可能已经启动了它,但没有在提示中输入“y”。
我尝试的另一种方法是yum history
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
109 | <xyz user> | 2015-08-20 07:18 | Erase | 1 E<
108 | root <root> | 2015-08-18 08:56 | Update | 3 >
107 | root <root> | 2015-08-14 07:39 | Update | 1
106 | root <root> | 2015-08-14 07:38 | Update | 1
105 | root <root> | 2015-08-14 07:38 | Update | 3
104 | root <root> | 2015-08-13 07:31 | Update | 1
103 | root <root> | 2015-08-11 05:46 | Update | 1
102 | root <root> | 2015-08-11 05:46 | Update | 2
101 | root <root> | 2015-08-11 05:45 | Update | 3
100 | root <root> | 2015-08-11 05:45 | Update | 3
99 | root <root> | 2015-08-10 20:41 | Update | 1
98 | root <root> | 2015-08-05 02:35 | Update | 1
97 | root <root> | 2015-05-14 10:52 | Update | 1
96 | root <root> | 2015-05-01 02:59 | Obsoleting | 2
95 | root <root> | 2015-04-09 16:06 | Update | 1 <
94 | <xyz.user> | 2015-03-28 08:49 | Update | 1 ><
93 | <xyz.usert> | 2015-03-28 08:14 | Erase | 3 ><
92 | <xyz.user> | 2015-03-13 07:46 | Install | 6 ><
91 | <xyz.user> | 2015-03-13 05:45 | I, U | 24 >
90 | root <root> | 2015-03-04 01:24 | Update | 3
但我找不到一种方法来确定推出yum update
和成功的日期。例如,如果我检查 18 日启动的标记为“更新”的交易 ID 108,我找不到yum update
该特定日期的命令:
history |grep 2015 |grep "yum update"
5182 20150313-054444 > yum update
我尝试的另一个路径是 with,/var/log/yum.log
但yum.log
也会显示安装和更新。如果在安装软件包 e:g: 时更新了软件包,yum install varnish
并且需要更新某些软件包,例如:(varnish-libs-2.1.5-5.el6.i686、3.0.7-1.el6.i686 等)将显示为更新在 yum.log 中
yum update
有没有办法找到 a启动并成功的日期?
答案1
你几乎回答了你的问题。您可以通过以下方式找到最新 5 个更新的软件包:
grep Updated: /var/log/yum.log | tail -5
输出示例:
Aug 05 13:28:34 Updated: virt-manager-common-1.1.0-9.git310f6527.fc21.noarch
Aug 05 13:28:34 Updated: glusterfs-libs-3.5.5-2.fc21.i686
Aug 05 13:28:35 Updated: virt-manager-1.1.0-9.git310f6527.fc21.noarch
Aug 05 13:28:36 Updated: virt-install-1.1.0-9.git310f6527.fc21.noarch
Aug 05 13:28:38 Updated: glusterfs-3.5.5-2.fc21.i686
答案2
首先您需要定义“升级”的含义。例如。仅使用较新内核的升级将是一次安装(并且可能会擦除旧内核)。如果有人“升级 foo”,这算不算?那么“发行版同步”最终只是进行升级(或者如果不进行升级)呢?交易失败了还算吗?
然后停止 grep 输出,它只会导致痛苦和磨难。
使用 API 非常简单,例如(最近一次启动事务以升级任何包的时间):
import yum
import time
yb = yum.YumBase()
for old in yb.history.old():
if "Update" in (hpkg.state for hpkg in old.trans_data):
print "Latest Update:", time.ctime(old.beg_timestamp)
break
答案3
以下命令列出最近安装或更新的 RPM 软件包:
rpm -qa --last | head
它也可能包括安装在 YUM 之外的软件包。该命令也可以在没有 root 权限的情况下运行。
[编辑]你可以尝试我的脚本https://github.com/seffparker/nagios-plugins/blob/master/check_pkg
答案4
您可以使用以下语句以 root 权限直接从 Yum History SQLite DB 查询此信息:
SELECT datetime( max(dt_end), 'unixepoch', 'localtime') FROM trans WHERE cmdline LIKE '%update%'
要查询的 SQLite 文件有 2 个可能的位置:
/var/lib/dnf/history.sqlite
/var/lib/yum/history.sqlite
例子: https://bigfix.me/relevance/details/3022966
有关的: https://serverfault.com/questions/389650/how-to-check-when-yum-update-was-last-run