ฉันต้องการที่จะหาครั้งสุดท้ายที่
apt-get update
รันคำสั่งบนเซิร์ฟเวอร์ของฉัน ฉันจะกำหนดข้อมูลนี้ได้อย่างไร
ฉันต้องการที่จะหาครั้งสุดท้ายที่
apt-get update
รันคำสั่งบนเซิร์ฟเวอร์ของฉัน ฉันจะกำหนดข้อมูลนี้ได้อย่างไร
คำตอบ:
อย่างน้อยในระบบ Ubuntu มีไฟล์ /etc/apt/apt.conf.d/15update-stamp บรรจุ:
APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};
ดังนั้นดูว่าคุณมี / var / lib / apt / periodic / update-success-stamp หรือไม่และถ้าคุณมีคุณสามารถใช้
stat -c %y /var/lib/apt/periodic/update-success-stamp
คำสั่งเพื่อรับเวลาของการร้องขอ "apt-get update" ครั้งล่าสุด
และหากระบบของคุณไม่มีไฟล์กำหนดค่าที่เหมาะสมคุณสามารถเพิ่มได้ตลอดเวลา
คุณสามารถตรวจสอบเวลาในการเข้าถึงไฟล์ใน / var / lib / apt / list ซึ่งได้รับการอัพเดตเมื่อคุณรันการอัพเดต apt-get หาก apt-get update ถูกรันด้วย sudo คุณควรมีบรรทัดที่ล็อกอินใน /var/log/auth.log เมื่อดำเนินการเสร็จแล้ว ..
apt-get update
อาจไม่ได้สร้างหรือไฟล์ update จะไม่อัปเดตไดเรกทอรีแคชดังนั้นเราจึงสามารถใช้ที่จะได้รับการประทับเวลาเมื่อที่ผ่านมาapt-get update
ได้รับการเรียกใช้:
stat -c %Y /var/cache/apt/
apt-get update
อย่าไปจากไฟล์ล็อค ไฟล์ล็อคไม่น่าเชื่อถือพวกเขามักจะเคลื่อนที่ไปตามช่วงเวลาด้วยลีนุกซ์รุ่นใหม่และการล้างข้อมูล (ลบ) โปรแกรมล็อคไฟล์เมื่อทำเสร็จแล้ว
คำสั่งต่อไปนี้จะให้สิ่งที่คุณต้องการ
ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1
นี่คือสองคำสั่งในหนึ่งเดียว ผลลัพธ์ของตัวกรองคำสั่งแรกเป็นสัญลักษณ์ที่สองผ่านสัญลักษณ์ไปป์ (|)
ในคำสั่งแรกฉันใช้ "ls" เพื่อแสดงเนื้อหาไฟล์ของไดเรกทอรี / var / log / apt ซึ่งเป็นไดเรกทอรีที่เก็บบันทึกประวัติการเข้าถึงสำหรับ apt-get ส่วน "-lt" เป็นจริงสองสวิตช์ สวิตช์ "l" ตัวแรกจะบอก "ls" เพื่อแสดงรายการหนึ่งไฟล์ต่อบรรทัดโดยมีรายละเอียด สวิตช์ "t" ตัวที่สองจะบอก "ls" เพื่อเรียงลำดับตามวันที่และเวลา "- สไตล์เวลา" บังคับให้เวลาวันที่แสดงในรูปแบบ "YYYY-MM-DD HH: MM"
ในส่วน "grep" ของคำสั่งสวิตช์ "-o" จะบอก grep ให้แสดงเฉพาะบางส่วนของแต่ละบรรทัดที่ตรงกับนิพจน์ทั่วไปเท่านั้น นิพจน์ทั่วไปที่ฉันใช้ที่นี่ตรวจจับเวลาวันที่ที่อยู่ในรูปแบบที่ระบุในคำสั่ง "ls" นอกจากนี้คุณยังจะสังเกตเห็นชิ้นส่วนเล็ก ๆ ของเวทมนตร์ที่ปลายสุดของคำสั่ง "grep" ซึ่งมีสวิตช์ "-m" ที่มีหมายเลข "1" ตามมาทันที สิ่งนี้บอกให้ "grep" หยุดค้นหาไม้ขีดไฟหลังจากพบไม้แรกแล้ว
โดยสรุปแล้วเรากำลังแสดงรายการรายละเอียดไฟล์บันทึก apt เพื่อให้เราสามารถดูวันที่แก้ไขล่าสุดได้จากนั้นเราเรียงลำดับตามวันที่และบอก grep เพื่อดึงวันแรกออกจากด้านบนซึ่งจะส่งคืน นั่นคือวันสุดท้ายที่ฉลาด - วิ่ง
ในการเล่นผู้สนับสนุนของปีศาจชั่วครู่หนึ่งมันเป็นเรื่องปกติสำหรับแพลตฟอร์ม Debian เช่น Ubuntu เพื่อกำหนดตารางเวลารับงานเป็นงานที่ทำงานเป็นประจำ หากคุณกำลังมองหาบุคคลที่ปลายอีกด้านของการดำเนินการ apt-get คุณอาจพบเครื่องจักร คุณสามารถจับคู่บันทึกการเข้าถึงกับบันทึก apt เสมอเพื่อดูว่ามีการประทับเวลาใด ๆ เกิดขึ้นหรือไม่ นอกจากนี้ยังเป็นไปได้ที่จะดูประวัติคำสั่งของผู้ใช้ในระดับหนึ่ง
หวังว่านี่จะช่วยได้!
/var/log/apt
apt-get install some-package
จริงๆแล้วบน Ubuntu มันไม่ได้บันทึกอะไรเมื่อฉันทำapt-get update
ฉันสงสัยว่าคุณสามารถตรวจสอบเวลาที่แก้ไขล่าสุดในไฟล์ / var / cache / apt เพื่อหาว่าการอัปเดตครั้งล่าสุดถูกนำไปใช้กับรายการแพ็กเกจหรือไม่
ฉันเพิ่งทดสอบสิ่งนี้และรัน "sudo apt-get update" สองครั้งติดต่อกันและวันที่ไม่เปลี่ยนแปลงจากค่าปัจจุบันของพวกเขา แต่ฉันสงสัยว่านี่เป็นเพราะไม่มีการอัพเดทใหม่ที่จะนำไปใช้และแคชนั้นหมดแล้ว ถึงวันที่
$ ls -l /var/lib/dpkg/lock
-rw-r----- 1 root root 0 2011-11-16 09:40 /var/lib/dpkg/lock
Synaptic บันทึกไฟล์ประวัติ (> ไฟล์> ประวัติ) ความถนัดบันทึกทั้งประวัติใน / var / log / aptitude และแพ็คเกจที่ติดตั้งอัตโนมัติใน / var / lib / aptitude / pkgstates ดังนั้นคุณสามารถตรวจสอบกิจกรรมล่าสุดได้
ฉันใช้เพื่อตรวจสอบว่าฉันจำเป็นต้องใช้/var/cache/apt
apt-get update
โดยค่าเริ่มต้นถ้าความแตกต่างระหว่างเวลาปัจจุบันและเวลาแคชของ/var/cache/apt
น้อยกว่า 24 apt-get update
ชั่วโมงผมไม่จำเป็นต้องวิ่ง ช่วงเวลาการอัพเดทเริ่มต้นสามารถเขียนทับได้โดยส่งผ่านตัวเลขไปยังฟังก์ชั่นrunAptGetUpdate()
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
}
ตัวอย่างผลลัพธ์:
<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate
Skip apt-get update because its last run was '0h 37m 43s' ago
ฉันแยกฟังก์ชั่นเหล่านี้ออกมาจาก github ส่วนตัวของฉัน: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/lไลบรารี/util.bash
info
และisEmptyString
? นอกจากนี้ยังinfo
เป็นตัวเลือกที่ดีของชื่อฟังก์ชั่นตั้งแต่ยังเป็นคำสั่ง นอกเหนือจากนั้นทางออกที่ดี!
/var/log/dpkg.log จะเก็บประวัติของสิ่งที่ทำ แต่ไม่จำเป็นว่าแอพใดที่เรียกว่า dpkg (synaptic, apt-get, etc)
ตัด apt-get ในสคริปต์ที่เขียน timestamp ลงในไฟล์ก่อนจากนั้นจึงทำงานตามปกติ ด้วยวิธีนี้คุณสามารถกำหนดรูปแบบและเวลาที่บันทึกได้;)
ต่อไปนี้เป็นหนึ่งในสายการบินเดียวที่จะเรียกใช้การอัปเดตหากยังไม่ได้เปิดใช้งานในวันสุดท้าย
(find /var/lib/apt/periodic/update-success-stamp -mtime +1 | grep update-success-stamp) && (/usr/bin/apt-get update)
ดูเหมือนว่าไฟล์ update-success-stamp ที่ถูกแก้ไขมากกว่าหนึ่งวันที่ผ่านมา หากพบไฟล์ที่มีอายุที่เหมาะสมแสดงว่ามีการอัพเดท หมายเหตุ: ไฟล์ update-success-stamp ต้องมีอยู่เพื่อให้สามารถใช้งานได้
/var/lib/apt/periodic/update-stamp