Temukan pembaruan terakhir kali dilakukan dengan apt-get

30

Saya harus mencari yang terakhir kali

apt-get update

perintah dijalankan di server saya. Bagaimana saya bisa menentukan informasi ini?

Mark Roddy
sumber

Jawaban:

23

Setidaknya dalam sistem Ubuntu ada file /etc/apt/apt.conf.d/15update-stamp yang mengandung:

APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};

Jadi lihat apakah Anda memiliki / var / lib / apt / periodic / update-sukses-cap dan jika Anda memilikinya, Anda dapat menggunakan

stat -c %y /var/lib/apt/periodic/update-success-stamp

perintah untuk mendapatkan waktu doa "apt-get update" terakhir.

Dan jika sistem Anda tidak memiliki file konfigurasi yang tepat, Anda selalu dapat menambahkannya.

Tuoma
sumber
+1 untuk menyertakan baris apt.conf. Di ubuntu 14.04 sepertinya file tersebut ada di/var/lib/apt/periodic/update-stamp
GnP
11

Anda bisa memeriksa waktu akses pada file di / var / lib / apt / daftar yang diperbarui ketika Anda menjalankan pembaruan apt-get. Jika pembaruan apt-get dijalankan dengan sudo, Anda seharusnya memiliki baris yang sudah masuk /var/log/auth.log ketika sudah selesai ..

rkthkr
sumber
2
Seperti yang ditunjukkan di tempat lain, Anda mungkin menemukan beberapa file tidak diperbarui dan karena itu belum diunduh lagi. Ini bagus jika Anda ingin tahu seberapa mutakhir daftar paket Anda, tetapi tidak jika Anda ingin tahu kapan pembaruan apt-get terakhir kali dijalankan. Yang pertama lebih mungkin.
David Pashley
10

Sebuah apt-get updatemungkin tidak membuat atau memperbarui file, itu memperbarui direktori cache sehingga kita dapat menggunakannya untuk mendapatkan cap waktu ketika yang terakhir apt-get updatedijalankan:

stat -c %Y /var/cache/apt/
Hans Lambermont
sumber
Perhatikan bahwa instalasi paket juga dapat memperbarui direktori cache. Ini bukan pemeriksaan yang andal untukapt-get update
GnP
3

Jangan pergi dari file kunci. File kunci tidak dapat diandalkan, mereka cenderung bergerak seiring waktu dengan rilis Linux baru, dan banyak program membersihkan (menghapus) file kunci ketika mereka selesai dengan mereka.

Perintah berikut akan memberi Anda apa yang Anda cari.

ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1

Ini adalah dua perintah dalam satu. Hasil dari filter perintah pertama menjadi yang kedua melalui simbol pipa (|).

Pada perintah pertama, saya menggunakan "ls" untuk membuat daftar isi file dari direktori / var / log / apt, yang merupakan direktori yang menyimpan log riwayat akses untuk apt-get. Bagian "-lt" sebenarnya adalah dua sakelar. Sakelar "l" pertama memberi tahu "ls" untuk mencantumkan satu file per baris dengan detail. Sakelar "t" kedua memberi tahu "ls" untuk mengurutkan berdasarkan tanggal dan waktu. "--waktu-gaya" memaksa waktu tanggal untuk ditampilkan dalam format "YYYY-MM-DD HH: MM".

Di bagian "grep" dari perintah, tombol "-o" memberi tahu grep untuk hanya memperlihatkan bagian dari setiap baris yang persis sama dengan persamaan reguler. Ekspresi reguler yang saya gunakan di sini mendeteksi waktu tanggal yang berada dalam format yang ditentukan dalam perintah "ls". Anda juga akan melihat potongan sihir kecil di akhir perintah "grep" yang ada "-m" dengan nomor "1" segera menyusul. Ini memberitahu "grep" untuk berhenti mencari yang cocok setelah menemukan yang pertama.

Jadi, secara ringkas, kami mencantumkan detail file log apt sehingga kami dapat melihat tanggal modifikasi terakhir, lalu mengurutkan berdasarkan tanggal dan memberi tahu grep untuk menarik tanggal pertama dari atas, yang kemudian dikembalikan. Itu tanggal terakhir yang tepat untuk berlari.

Untuk bermain sebagai advokat iblis untuk sesaat, bagaimanapun, itu umum untuk platform Debian seperti Ubuntu untuk menjadwalkan apt-get sebagai pekerjaan yang berjalan secara teratur. Jika Anda mencari orang di ujung eksekusi apt-get, Anda sebenarnya dapat menemukan mesin. Anda selalu dapat mencocokkan log akses dengan log apt untuk melihat apakah ada stempel waktu yang bersamaan. Dimungkinkan juga untuk melihat riwayat perintah pengguna sampai batas tertentu.

Semoga ini membantu!

Aaron Belovsky
sumber
1
Sayangnya tidak berfungsi. Di /var/log/aptdalamnya juga masuk ketika saya misalnya melakukan apt-get install some-package. Sebenarnya di Ubuntu itu tidak mencatat sesuatu ketika saya melakukannyaapt-get update
Alex
2

Saya menduga Anda dapat memeriksa waktu modifikasi terakhir pada file / var / cache / apt untuk mencari tahu kapan pembaruan terakhir diterapkan ke daftar paket.

Saya baru saja menguji ini, dan menjalankan "sudo apt-get update" dua kali berturut-turut, dan tanggal tidak berubah dari nilai mereka saat ini, tetapi saya menduga ini karena tidak ada pembaruan baru untuk diterapkan, dan bahwa cache sudah habis saat ini.

slacy
sumber
1
$ ls -l /var/lib/dpkg/lock 
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
pengguna104833
sumber
1

Synaptic mencatat file histori (> File> History), aptitude mencatat kedua histori di / var / log / aptitude dan paket yang diinstal secara otomatis di / var / lib / aptitude / pkgstates, sehingga Anda dapat memeriksanya untuk aktivitas terbaru.

Josh Brower
sumber
1

Saya gunakan /var/cache/aptuntuk menentukan apakah saya perlu menjalankan apt-get update. Secara default, jika perbedaan antara waktu saat ini dan waktu cache /var/cache/aptkurang dari 24 jam, saya tidak perlu menjalankan apt-get update. Interval pembaruan default dapat ditimpa dengan mengirimkan angka ke fungsirunAptGetUpdate()

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
}

Output sampel:

<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate 

Skip apt-get update because its last run was '0h 37m 43s' ago

Saya mengekstrak fungsi-fungsi ini dari github pribadi saya: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash

Nam Nguyen
sumber
Jawabannya tidak lengkap. Apa infodan isEmptyString? Juga, infoadalah pilihan nama fungsi yang buruk karena itu juga merupakan perintah. Selain itu, solusi yang bagus!
Ronny Andersson
@RonnyAndersson, semuanya dalam lib ini: github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/…
Nam Nguyen
0

/var/log/dpkg.log akan menyimpan riwayat dari apa yang telah dilakukan, tetapi belum tentu aplikasi mana yang disebut dpkg (synaptic, apt-get, dll).

Jonathan
sumber
0

bungkus apt-get dalam skrip yang pertama-tama menulis stempel waktu ke file, dan kemudian melakukan pekerjaan biasa. dengan begitu, Anda dapat menentukan format cap waktu dan lokasi;)

Sujoy
sumber
Sujoy, Membungkusnya dalam skrip tidak praktis jika Anda memiliki ratusan server, dan Anda tidak ingin mempertahankan skrip lain yang mungkin menyebabkan masalah saat berikutnya Anda memperbarui paket apt-get Anda. Saya pikir pemohon mencari jawaban yang menggunakan informasi yang sudah ada di komputernya.
pdwalker
0

Berikut ini adalah one-liner sederhana untuk menjalankan pembaruan jika belum dijalankan pada hari terakhir.

(find /var/lib/apt/periodic/update-success-stamp -mtime +1 | grep update-success-stamp) && (/usr/bin/apt-get update)

Itu mencari file pembaruan-sukses-cap, yang dimodifikasi lebih dari satu hari yang lalu. Jika ia menemukan file dengan usia yang tepat, maka ia menjalankan pembaruan. Catatan: file perbarui-keberhasilan-cap harus ada agar ini berfungsi.

Christian Long
sumber