Znajdź ostatnią aktualizację wykonano przy pomocy apt-get

30

Muszę znaleźć ostatni raz, kiedy

apt-get update

polecenie zostało uruchomione na moim serwerze. Jak mogę ustalić te informacje?

Mark Roddy
źródło

Odpowiedzi:

23

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ć.

Tuomas
źródło
+1 za włączenie linii apt.conf. Na Ubuntu 14.04 wygląda na to, że plik znajduje się w/var/lib/apt/periodic/update-stamp
GnP
11

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.

rkthkr
źródło
2
Jak wskazano w innym miejscu, niektóre pliki mogą nie zostać zaktualizowane i dlatego nie zostały ponownie pobrane. Jest to w porządku, jeśli chcesz wiedzieć, jak aktualne są twoje listy pakietów, ale nie, jeśli chcesz wiedzieć, kiedy ostatnio uruchomiono aktualizację apt-get. Ten pierwszy jest bardziej prawdopodobny.
David Pashley,
10

apt-get updateNie 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 updatebył prowadzony:

stat -c %Y /var/cache/apt/
Hans Lambermont
źródło
Pamiętaj, że instalacja pakietu może również zaktualizować katalog pamięci podręcznej. To nie jest wiarygodny czek dlaapt-get update
GnP
3

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!

Aaron Belovsky
źródło
1
Niestety nie działa. W /var/log/aptnim 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
Alex
2

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ś.

slacy
źródło
1
$ ls -l /var/lib/dpkg/lock 
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
użytkownik104833
źródło
1

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ść.

Josh Brower
źródło
1

Używam, /var/cache/aptaby ustalić, czy muszę uruchomić apt-get update. Domyślnie, jeśli różnica między bieżącym czasem a czasem buforowania /var/cache/aptwynosi 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

Nam Nguyen
źródło
Odpowiedź jest niekompletna. Co to jest infoi isEmptyString? Ponadto infojest zły wybór nazwy funkcji, ponieważ jest to również polecenie. Poza tym fajne rozwiązanie!
Ronny Andersson,
@RonnyAndersson, wszystko w tej bibliotece: github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/…
Nam Nguyen
0

/var/log/dpkg.log będzie przechowywać historię tego, co zostało zrobione, ale niekoniecznie która aplikacja o nazwie dpkg (synaptic, apt-get itp.).

Jonathan
źródło
0

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;)

Sujoy
źródło
Sujoy, Zawijanie go w skrypt nie jest praktyczne, jeśli masz setki serwerów i nie chcesz utrzymywać kolejnego skryptu, który może powodować problemy przy następnej aktualizacji pakietu apt-get. Myślę, że wnioskodawca szuka odpowiedzi, która wykorzystuje informacje już istniejące w jego komputerze.
pdwalker
0

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.

Christian Long
źródło