![为什么需要 dnf-makecache.timer?](https://linux22.com/image/170746/%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9C%80%E8%A6%81%20dnf-makecache.timer%EF%BC%9F.png)
在 systemd (CentOS8) 中,我注意到即使在我这样做之后,dnf
日志中也会弹出 ( ) 。我发现一个计时器正在为 ()运行。/var/log/messages
dnf remove dnf-automatic
systemctl list-unit-files --type=timer
dnf-makecache.timer
我在网上能找到的最好的就是 dnf-makecache“更新 Repo 缓存”。好吧,但这实际上意味着什么?为什么存储库缓存需要每小时更新一次?如果手动使用更新,这种情况不会发生吗dnf update
?
如果不刷新会dnf update
失败或无法获取最新版本吗?dnf-makecache
或者这是一种补充dnf-automatic
,如果不使用自动则不需要? IMO:如果是这种情况,那么在dnf-automatic
删除时就应该将其删除。
systemctl disable dnf-makecache.timer
使用和禁用此计时器的负面/缺点systemctl stop dnf-makecache.timer
?
答案1
好吧,但这实际上意味着什么?
这意味着包的远程索引被下载到本地文件缓存,以加快后续dnf
命令的速度。
为什么存储库缓存需要每小时更新一次?
这样做是为了方便和加速dnf
命令。任何时候你运行egdnf install
命令,它都需要有一个“新鲜”的存储库元数据。如果没有它,当您以交互方式运行命令时,很有可能必须等待元数据刷新dnf
。
请注意,尽管计时器设置为每 1 小时一次,但有效运行时间不超过每 3 小时一次。这是一个bug,详细的这里。
如果使用 dnf 更新手动更新,不会发生这种情况吗?
是的,默认情况下无论如何都会发生如果元数据被认为是过时的。也就是说,超过了 6 小时的默认生命周期(每个存储库定义可以覆盖此 TTL)。如果回购协议的定义具有 ,则永远不会发生这种情况metadata_expire=-1
。
如果 dnf-makecache 没有刷新,dnf 更新会失败或无法获取最新版本吗?
不,它不会失败。尽管您可以说,如果元数据已经存在并且网络连接不稳定,那么它可能会稍微更可靠。
或者这是对 dnf-automatic 的补充,如果不使用自动则不需要?
它是对两者的补充dnf
,dnf-automatic
因为两者都有更高的机会在新的元数据缓存就位的情况下运行,从而运行得更快。
使用 systemctl disable dnf-makecache.timer 和 systemctl stop dnf-makecache.timer 禁用此计时器的负面/缺点?
较慢的dnf
命令/交互式等待安装和更新。除非你跟进文章并调整:
metadata_timer_sync=3600
计时器的作用非常低,不会产生太大的好处。
PS,您会问很多问题,但在这个社区中,您通常应该问一个:)
请咨询man dnf
和man dnf.conf
。那些正确记录的人不应该白费力气。
答案2
因为我的 centos 8.1 服务器位于防火墙和有限代理后面,所以 dnf-makecache-timer 会反复生成烦人的错误。它似乎使用随机动态服务器列表,我不能全部添加受信任的代理白名单。这也将是反对我们的安全准则。
使用 yum 可以定义将在(可能)所有包管理器操作中使用和尊重的服务器列表:mirrorlist=… 和 include_only=… 。
我找不到任何有效的解决方案或设置来限制 dnf-makecache 计时器使用的服务器。
奇怪的是,当我尝试时,命令行调用从未失败。
据我了解隐含的(以我目前的理解)合理的问题:
“我不需要它,我不想要它,(在我们的例子中)它会抛出我无法控制的错误:我怎样才能禁用它?
我在这里回答一下:
添加到[main]
- 部分/etc/dnf/dnf.conf
metadata_timer_sync=0
如 dnf.conf - 手册页中所述:
Use 0 to completely disable automatic metadata synchronizing.