仅当它早于特定时间时才更新 apt-get 缓存

use*_*548 5 scripting debian apt

我在 debian 上。仅当自上次更新以来的时间大于或小于特定数量时我才想执行 apt-get 更新(可能还有其他内容),并且使用直接命令,没有 cron 技巧或类似的

假设我对 apt-get previous state 一无所知,自安装操作系统以来可能从未发布过更新,或者在 2 分钟前手动触发,或者由无人值守升级服务自动发布。

例如。

if(time > 30 min) apt-get update
if(time > 2 days) something else
Run Code Online (Sandbox Code Playgroud)

这个问题类似于我在 askubuntu 中发现的另一个问题,但由于 debian 配置中的设置不同,我找不到通知我上次更新命令何时发生的时间戳文件。

Gil*_*il' 7

/var/cache/apt/pkgcache.bin每次apt-get update运行时都会重新生成文件(否则不会重新生成)。

例如,如果您只想apt-get update在过去一小时内未运行的情况下运行,则可以使用

#!/bin/sh
last_update=$(stat -c %Y /var/cache/apt/pkgcache.bin)
now=$(date +%s)
if [ $((now - last_update)) -gt 3600 ]; then
  apt-get update
fi
Run Code Online (Sandbox Code Playgroud)

或者

#!/bin/sh
if [ -z "$(find /var/cache/apt/pkgcache.bin -mmin -60)" ]; then
  apt-get update
fi
Run Code Online (Sandbox Code Playgroud)

请注意,如果您几乎同时运行此脚本的多个副本,它们可能都决定运行apt-get update. 如果这是一个问题,请使用锁(这是一个完全独立的问题)。