Muszę znaleźć ostatni raz, kiedy
apt-get update
polecenie zostało uruchomione na moim serwerze. Jak mogę ustalić te informacje?
Muszę znaleźć ostatni raz, kiedy
apt-get update
polecenie zostało uruchomione na moim serwerze. Jak mogę ustalić te informacje?
Odpowiedzi:
Przynajmniej w systemach Ubuntu istnieje plik /etc/apt/apt.conf.d/15update-stamp zawierający:
APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};
Sprawdź, czy masz / var / lib / apt / periodic / update-success-stamp, a jeśli go masz, możesz użyć
stat -c %y /var/lib/apt/periodic/update-success-stamp
polecenie, aby uzyskać czas ostatniego wywołania „apt-get update”.
A jeśli twój system nie ma tego pliku konfiguracyjnego apt, zawsze możesz go dodać.
Możesz sprawdzić czasy dostępu do plików w / var / lib / apt / list, które są aktualizowane po uruchomieniu aktualizacji apt-get. Jeśli aktualizacja apt-get została uruchomiona z sudo, powinieneś mieć zalogowany wiersz w /var/log/auth.log, kiedy to zostało zrobione.
apt-get update
Nie mogą tworzyć lub pliki aktualizacji, to nie aktualizuje katalogu pamięci podręcznej tak, że możemy użyć, aby uzyskać znacznik czasu, gdy ostatni apt-get update
był prowadzony:
stat -c %Y /var/cache/apt/
apt-get update
Nie odchodź od plików blokady. Zablokuj pliki nie są niezawodne, mają tendencję do przemieszczania się w miarę upływu czasu wraz z nowymi wersjami Linuksa, a wiele programów oczyszcza (usuwa) pliki blokujące, gdy z nimi skończysz.
Następujące polecenie zapewni ci to, czego szukasz.
ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1
To są dwa polecenia w jednym. Wyniki pierwszego polecenia filtrują do drugiego przez symbol potoku (|).
W pierwszym poleceniu używam „ls”, aby wyświetlić zawartość pliku katalogu / var / log / apt, który jest katalogiem przechowującym dzienniki historii dostępu dla apt-get. Część „-lt” to tak naprawdę dwa przełączniki. Pierwszy przełącznik „l” mówi „ls”, aby szczegółowo wypisał jeden plik w wierszu. Drugi przełącznik „t” nakazuje „ls” sortowanie według daty i godziny. „--time-style” wymusza wyświetlanie daty i godziny w formacie „RRRR-MM-DD GG: MM”.
W części polecenia „grep” przełącznik „-o” mówi grep, aby pokazywał tylko te części każdego wiersza, które dokładnie pasują do wyrażenia regularnego. Użyte tutaj wyrażenie regularne wykrywa daty, które są w formacie określonym w poleceniu „ls”. Na końcu komendy „grep” zauważysz również prawdziwy kawałek magii, że jest przełącznik „-m” z cyfrą „1” bezpośrednio po nim. To mówi „grep”, aby przestał szukać meczów po znalezieniu pierwszego.
Podsumowując, podajemy szczegóły pliku dziennika apt, abyśmy mogli zobaczyć datę ostatniej modyfikacji, następnie sortujemy według daty i mówimy grepowi, aby usunął pierwszą datę z góry, którą następnie zwraca. To ostatnia data, w której apt-get został uruchomiony.
Jednak aby przez chwilę grać w adwokata diabła, platformy Debiana, takie jak Ubuntu, często planują apt-get jako zadanie, które będzie regularnie wykonywane. Jeśli szukasz osoby na drugim końcu wykonywania apt-get, możesz faktycznie znaleźć maszynę. Zawsze możesz dopasować dzienniki dostępu do dzienników apt, aby sprawdzić, czy znaczniki czasu się pokrywają. Można również w pewnym stopniu przejrzeć historię poleceń użytkownika.
Mam nadzieję że to pomoże!
/var/log/apt
nim jest również rejestrowane, kiedy na przykład zrobić apt-get install some-package
. Właściwie na Ubuntu nie loguje się, kiedy to robięapt-get update
Podejrzewam, że możesz sprawdzić czasy ostatniej modyfikacji plików / var / cache / apt, aby dowiedzieć się, kiedy ostatnie aktualizacje zostały zastosowane do list pakietów.
Właśnie to przetestowałem i uruchomiłem „sudo apt-get update” dwa razy z rzędu, a daty nie zmieniły się w stosunku do ich bieżącej wartości, ale podejrzewam, że dzieje się tak, ponieważ nie było nowych aktualizacji do zastosowania i że pamięci podręczne są uruchomione spotykać się z kimś.
$ ls -l /var/lib/dpkg/lock
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
Synaptic rejestruje plik historii (> Plik> Historia), aptitude rejestruje zarówno historię w / var / log / aptitude, jak i automatycznie instalowane pakiety w / var / lib / aptitude / pkgstates, abyś mógł sprawdzić ich najnowszą aktywność.
Używam, /var/cache/apt
aby ustalić, czy muszę uruchomić apt-get update
. Domyślnie, jeśli różnica między bieżącym czasem a czasem buforowania /var/cache/apt
wynosi mniej niż 24 godziny, nie muszę uruchamiać apt-get update
. Domyślny interwał aktualizacji można zastąpić, przekazując liczbę do funkcjirunAptGetUpdate()
function getLastAptGetUpdate()
{
local aptDate="$(stat -c %Y '/var/cache/apt')"
local nowDate="$(date +'%s')"
echo $((nowDate - aptDate))
}
function runAptGetUpdate()
{
local updateInterval="${1}"
local lastAptGetUpdate="$(getLastAptGetUpdate)"
if [[ "$(isEmptyString "${updateInterval}")" = 'true' ]]
then
# Default To 24 hours
updateInterval="$((24 * 60 * 60))"
fi
if [[ "${lastAptGetUpdate}" -gt "${updateInterval}" ]]
then
info "apt-get update"
apt-get update -m
else
local lastUpdate="$(date -u -d @"${lastAptGetUpdate}" +'%-Hh %-Mm %-Ss')"
info "\nSkip apt-get update because its last run was '${lastUpdate}' ago"
fi
}
Przykładowe dane wyjściowe:
<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate
Skip apt-get update because its last run was '0h 37m 43s' ago
Wyodrębniłem te funkcje z mojego osobistego github: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash
info
i isEmptyString
? Ponadto info
jest zły wybór nazwy funkcji, ponieważ jest to również polecenie. Poza tym fajne rozwiązanie!
zawiń apt-get w skrypcie, który najpierw zapisuje znacznik czasu do pliku, a następnie wykonuje zwykłą pracę. w ten sposób możesz zdefiniować format i lokalizację znacznika czasu;)
Oto prosty linijka do uruchomienia aktualizacji, jeśli nie została uruchomiona w ostatnim dniu.
(find /var/lib/apt/periodic/update-success-stamp -mtime +1 | grep update-success-stamp) && (/usr/bin/apt-get update)
Poszukuje pliku pieczęci aktualizacji, który został zmodyfikowany ponad jeden dzień temu. Jeśli znajdzie plik w odpowiednim wieku, uruchomi aktualizację. Uwaga: aby to zadziałało, musi istnieć plik pieczęci aktualizacji.
/var/lib/apt/periodic/update-stamp