나는 데비안을 사용하고 있습니다. 마지막 업데이트 이후의 시간이 특정 기간(또는 다른 기간)보다 크거나 작은 경우에만 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
물론 다른 사람들이 지적했듯이 이 코드의 인스턴스가 하나만 실행되고 있는지 확인하세요.