私はDebianを使用しています。最後の更新以降の時間が特定の期間(または他の期間)より大きいか小さい場合にのみ、apt-get更新を実行したいと思います。直接コマンドを使用し、クローントリックまたは同様の方法を使用しないでください。。
apt-get以前の状態について何も知らないとします。、オペレーティングシステムがインストールされてからアップデートがリリースされなかったか、2分前に手動でトリガされたか、無人アップグレードサービスによって自動的にリリースされた可能性があります。
例えば。
if(time > 30 min) apt-get update
if(time > 2 days) something else
この問題はaskubuntuで見つかったもう1つの問題と似ていますが、Debian設定の他の設定のために最後の更新コマンドが発生したタイミングを示すタイムスタンプファイルが見つかりません。
答え1
/var/cache/apt/pkgcache.bin
このファイルは実行されるたびに再生成されますapt-get update
(それ以外の場合は再生成されません)。
apt-get update
たとえば、過去1時間で実行されていない場合にのみ実行したい場合は、次のようにします。
#!/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
または
#!/bin/sh
if [ -z "$(find /var/cache/apt/pkgcache.bin -mmin -60)" ]; then
apt-get update
fi
このスクリプトの複数のコピーをほぼ同時に実行する場合は、すべて実行することを決定できますapt-get update
。これが問題の場合は、ロックを使用してください(完全に別々の問題です)。
答え2
確立された既存の回答2016年(5年以上)では、debian stable(バージョン11)とoldstable(v.10)にこのファイルは/var/cache/apt/pkgcache.bin
存在できませんでした。
+ cat /etc/debian_version
10.11
findのような仕事の代替は私に適しています。
if [ -z "$(find /var/cache/apt -maxdepth 0 -mmin -60)" ]; then
apt-get update
fi
find(1)
sの-maxdepth 0
パラメータと値を確認してください。
条件付きでコマンドを呼び出すために使用されるフラグファイル(またはディレクトリ)の時間情報の元の意味を理解した場合、元の答えは依然として質問に答えますapt-get update
。
これはの変更によって引き起こされる可能性がありますが、apt-get(8)
この回答がどのように変更されたか(たとえば、後でどのバージョンが変更されたか)、完全にはわかりません。 YMMV。
この答えに注目すべき点は、ディレクトリノードの時間情報に依存することです。私はこれがファイルノード(以前のファイルノード)に比べて劣っていると思います。これらの変更を適用するときは、ファイルシステムの詳細を確認してください。 YMMV。
引用:
答え3
他の答えと同様に、修正時間/var/cache/apt/pkgcache.bin
は指標ですが、最新バージョンのUbuntuには最初にファイルが存在しません。
以下は、is_modified_within_minutes
私が思いついた短い機能と使い方です。
is_modified_within_minutes() { test -f "$1" && test -z "$(find "$1" -mmin +$2)"; }
is_modified_within_minutes /var/cache/apt/pkgcache.bin 1440 || sudo apt-get update
もちろん、他の人が指摘したように、このコードのインスタンスが1つだけ実行されていることを確認してください。