특정 시간보다 오래된 경우에만 apt-get 캐시를 업데이트하세요.

특정 시간보다 오래된 경우에만 apt-get 캐시를 업데이트하세요.

나는 데비안을 사용하고 있습니다. 마지막 업데이트 이후의 시간이 특정 기간(또는 다른 기간)보다 크거나 작은 경우에만 apt-get 업데이트를 수행하고 싶습니다.직접 명령을 사용하고 크론 트릭이나 이와 유사한 방법을 사용하지 마십시오..

apt-get 이전의 상태에 대해 아무것도 모른다고 가정합니다., 운영 체제가 설치된 이후 업데이트가 릴리스된 적이 없거나 2분 전에 수동으로 트리거되었거나 무인 업그레이드 서비스에 의해 자동으로 릴리스되었을 수 있습니다.

예를 들어.

if(time > 30 min) apt-get update
if(time > 2 days) something else

이 문제는 askubuntu에서 발견한 또 다른 문제와 유사하지만 데비안 구성의 다른 설정으로 인해 마지막 업데이트 명령이 발생한 시기를 알려주는 타임스탬프 파일을 찾을 수 없습니다.

답변1

/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

또는

#!/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

물론 다른 사람들이 지적했듯이 이 코드의 인스턴스가 하나만 실행되고 있는지 확인하세요.

관련 정보