จะทราบได้อย่างไรว่ามีการอัพเดทให้ใช้งานหรือไม่?


8

ฉันใช้เซิร์ฟเวอร์อูบุนตู 12.04 LTS และฉันคิดว่ามันคงจะดีถ้าฉันได้รับแจ้งเมื่อมีการอัพเดท แต่ฉันไม่สามารถรู้วิธีการ ...

ฉันลองดูที่apt-getหน้าคน จากนั้นฉันสามารถใช้apt-get -s upgradeเพื่อรับเอาท์พุท apt-get ในสคริปต์โดยไม่มีการบล็อกคำถาม

ตอนนี้ฉันเห็นความแตกต่างอย่างชัดเจน:

อัปเดตพร้อมใช้งาน:

apt-get -s upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  dpkg dpkg-dev libdpkg-perl
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst dpkg [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [amd64])
Conf dpkg (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [amd64])
Inst dpkg-dev [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all]) []
Inst libdpkg-perl [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf libdpkg-perl (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf dpkg-dev (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])

ไม่สามารถอัปเดตได้:

apt-get -s upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

แต่ฉันไม่ทราบวิธีการดำเนินการจากที่นั่น ฉันจะบอกได้อย่างไรจากสคริปต์ทุบตี (หรือสคริปต์ PHP) ว่ามีการอัปเดตที่พร้อมใช้งานหรือไม่

แก้ไข:

นี่คือรหัสทุบตีปัจจุบันของฉัน มันไม่ทำงาน.

updates_available=`/etc/update-motd.d/90-updates-available`

if [ "${updates_available}" = "0 packages can be updated. 0 updates are security updates." ];
then
   echo "No updates are available"
else
   echo "There are updates available"
fi

มันจะบอกได้0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.ก็ต่อเมื่อไม่มีการอัพเดท
Nattgew

คำตอบ:


18

อ่านหน้าคนสำหรับ motd(5), และpam_motd(8) update-motd(5)ในระบบของฉัน/etc/update-motd.d/90-updates-availableจะเรียก/usr/lib/update-notifier/update-motd-updates-availableสิ่งที่แสดงสิ่งนี้เมื่อฉันเข้าสู่ระบบ:

19 packages can be updated.
12 updates are security updates.

ล้วงลึกเล็ก ๆ น้อย ๆ ที่ "...- อัปเดตพร้อมใช้งาน" /usr/lib/update-notifier/apt-check --human-readableจะเรียกสคริปต์ หากคุณอ่าน (python) คุณจะเห็นว่าหากคุณไม่ใช้แฟล็กที่มนุษย์สามารถอ่านได้มันจะส่งเอาต์พุต "19; 12" ไปยัง stderr เราสามารถคว้าสิ่งนี้ได้ด้วย:

IFS=';' read updates security_updates < <(/usr/lib/update-notifier/apt-check 2>&1)
echo $updates
echo $security_updates 
19
12

ตอนนี้คุณสามารถพูดได้:

if (( updates == 0 )); then
    echo "No updates are available"
else
    echo "There are updates available"
fi

ฉันสามารถไปกับสิ่งนั้นและทดสอบif [ / etc / update-motd.d / 90-updates-available` = "0 แพ็คเกจสามารถอัปเดตได้ 0 อัปเดตเป็นการอัพเดทความปลอดภัย" ]; ถ้าอย่างนั้น ... fi`
Adeline

น่าเสียดายที่เช็คไม่ทำงาน (ฉันเพิ่มคำพูดที่ถูกลืมในคำตอบก่อนหน้าของฉัน) ฉันสงสัยว่ามีบางสิ่งที่ต้องทำกับบรรทัดใหม่ ฉันได้อัพเดตโพสต์ของฉันด้วยรหัสที่ฉันได้รับจากการตอบ
Adeline

คำตอบที่กลั่น
เกล็นแจ็คแมน

คำตอบที่ยอดเยี่ยม @glennjackman ฉันจะตอบด้วยgoogle.com/search?q=apt-get+check+if+updates+are+available #ImNotHelpfulToday =)
0xSheepdog
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.