Saya harus mencari yang terakhir kali
apt-get update
perintah dijalankan di server saya. Bagaimana saya bisa menentukan informasi ini?
Saya harus mencari yang terakhir kali
apt-get update
perintah dijalankan di server saya. Bagaimana saya bisa menentukan informasi ini?
Jawaban:
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.
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 ..
Sebuah apt-get update
mungkin tidak membuat atau memperbarui file, itu memperbarui direktori cache sehingga kita dapat menggunakannya untuk mendapatkan cap waktu ketika yang terakhir apt-get update
dijalankan:
stat -c %Y /var/cache/apt/
apt-get update
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!
/var/log/apt
dalamnya juga masuk ketika saya misalnya melakukan apt-get install some-package
. Sebenarnya di Ubuntu itu tidak mencatat sesuatu ketika saya melakukannyaapt-get update
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.
$ ls -l /var/lib/dpkg/lock
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
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.
Saya gunakan /var/cache/apt
untuk menentukan apakah saya perlu menjalankan apt-get update
. Secara default, jika perbedaan antara waktu saat ini dan waktu cache /var/cache/apt
kurang 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
info
dan isEmptyString
? Juga, info
adalah pilihan nama fungsi yang buruk karena itu juga merupakan perintah. Selain itu, solusi yang bagus!
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;)
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.
/var/lib/apt/periodic/update-stamp