PlusMagi's Blog By Pitt Phunsanit Linux วิธีเช็คเวลาทำงานและประวัติล่าสุดของ Unattended-Upgrades บน Ubuntu / Debian

วิธีเช็คเวลาทำงานและประวัติล่าสุดของ Unattended-Upgrades บน Ubuntu / Debian

หลังจากเปิดใช้งาน Unattended-Upgrades เพื่อติดตั้ง Security Patch อัตโนมัติ ปัญหาที่หลายคนสงสัยคือ “แล้วตกลงระบบจะเริ่มรันกี่โมง?” และ “ทำงานล่าสุดไปเมื่อไหร่ สำเร็จหรือไม่?”

ระบบของ Ubuntu/Debian ยุคปัจจุบันไม่ได้พึ่งพา Cron ในการสั่งรัน แต่ส่งต่อหน้าที่ให้ Systemd Timers เป็นผู้ควบคุมเวลาทั้งหมด บทความนี้จะพาไปดูวิธีตรวจเช็กรอบเวลาและผลการรันจริงแบบเจาะลึก


เข้าใจกลไก: ทำไมมี 2 บริการที่ชื่อคล้ายกัน?

เมื่อพูดถึงการอัปเดตอัตโนมัติ ระบบจะแบ่งงานออกเป็น 2 จังหวะ

  • apt-daily (Update) — เทียบเท่า apt-get update ทำหน้าที่ตรวจสอบรายชื่อแพ็กเกจใหม่และดาวน์โหลดไฟล์เตรียมไว้ล่วงหน้า (ปกติรัน วันละ 2 ครั้ง)
  • apt-daily-upgrade (Upgrade) — ทำหน้าที่เรียกสคริปต์ unattended-upgrade เพื่อติดตั้งแพ็กเกจความปลอดภัยลงเครื่องจริง (ปกติรัน วันละ 1 ครั้ง)

เช็กรอบเวลาทำงาน (รันล่าสุดเมื่อไหร่ และจะรันรอบถัดไปกี่โมง)

ใช้คำสั่งตรวจสอบสถานะ Systemd Timer ที่เกี่ยวข้องกับ apt

systemctl list-timers | grep -E 'apt-daily|apt-daily-upgrade'

ตัวอย่างผลลัพธ์

NEXT                        LEFT        LAST                        PASSED       UNIT                      ACTIVATES
Wed 2026-09-09 13:46:50 +07 3h 41min    Tue 2026-09-08 23:16:15 +07 10h ago      apt-daily.timer           apt-daily.service
Thu 2026-09-10 06:43:54 +07 20h left    Wed 2026-09-09 06:56:47 +07 3h 10min ago apt-daily-upgrade.timer   apt-daily-upgrade.service


วิธีอ่านผลลัพธ์

  • LAST (ทำล่าสุดเมื่อไหร่):
    • apt-daily-upgrade.timer ติดตั้งแพ็กเกจล่าสุดไปเมื่อเช้า 06:56:47 น.
  • NEXT (จะรันรอบถัดไปกี่โมง):
    • รอบถัดไปคือพรุ่งนี้เช้า 06:43:54 น.
  • ทำไมเวลาถึงเป็นเศษนาทีแปลก ๆ (เช่น 06:43 น.)?
    • ระบบเปิดใช้ฟังก์ชัน RandomizedDelaySec เพื่อสุ่มกระจายเวลา ไม่ให้เซิร์ฟเวอร์ทั่วโลกยิงไปโหลดแพ็กเกจจาก Mirror พร้อมกันในวินาทีเดียวกัน

เช็คว่าการรันล่าสุด ติดตั้งอะไรไปบ้าง (Log Files)

แม้ Timer จะบอกว่ารันแล้ว แต่ถ้าอยากรู้ว่ามีแพ็กเกจอะไรถูกอัปเกรดไปบ้าง ให้ดูจากไฟล์ Log ของตัว Unattended-Upgrades โดยตรง


ดูประวัติการอัปเกรดล่าสุด

sudo cat /var/log/unattended-upgrades/unattended-upgrades.log

กรณีที่มีการอัปเดตแพ็กเกจจริง

2026-09-09 06:56:49,236 INFO Starting unattended upgrades script
2026-09-09 06:56:55,102 INFO Packages that will be upgraded: linux-libc-dev openssl
2026-09-09 06:57:10,884 INFO All upgrades installed

กรณีที่ระบบปลอดภัยและไม่มีอะไรต้องอัปเดต

2026-09-09 06:56:49,236 INFO Starting unattended upgrades script
2026-09-09 06:56:52,410 INFO No packages found that can be upgraded unattended

ดูบันทึกการทำงานของตัวติดตั้งระบบ (dpkg log)

หากต้องการยืนยันว่าไฟล์ binary บนระบบถูกเขียนทับตอนกี่โมง ให้ดูที่ dpkg log

sudo cat /var/log/unattended-upgrades/unattended-upgrades-dpkg.log

เช็คสถานะการเรียกทำงานผ่าน Systemd Journal

หากไฟล์ log ใน /var/log/ ไม่มีข้อมูลใหม่ หรือสงสัยว่า service มีปัญหาตอนถูกเรียกขึ้นมา สามารถดู system log ย้อนหลังเฉพาะของวันนี้ได้:

เช็กรอบดาวน์โหลดข้อมูล (apt-daily)

journalctl -u apt-daily.service --since today

เช็กรอบติดตั้งแพ็กเกจ (apt-daily-upgrade)

journalctl -u apt-daily-upgrade.service --since today

หากทำงานปกติ จะพบข้อความสรุปสถานะ Deactivated successfully ปรากฏอยู่ท้ายกระบวนการ


ทิปส่งท้าย: ถ้าอยากเปลี่ยนเวลาติดตั้ง ไม่ให้ตรงกับช่วงเช้า

หากระบบของคุณมีผู้ใช้งานหนาแน่นช่วง 06:00–07:00 น. และต้องการเลื่อนเวลาติดตั้งไปเป็นช่วงดึก (เช่น 03:00 น.) สามารถสั่ง override เวลาได้ง่าย ๆ ผ่านคำสั่ง

sudo systemctl edit apt-daily-upgrade.timer

แล้วระบุเวลาใหม่ลงไป

[Timer]
OnCalendar=
OnCalendar=*-*-* 03:00:00
RandomizedDelaySec=0

บันทึกไฟล์แล้วรัน

sudo systemctl daemon-reload
sudo systemctl restart apt-daily-upgrade.timer

เมื่อใช้คำสั่ง systemctl list-timers ตรวจสอบอีกครั้ง คอลัมน์ NEXT จะเปลี่ยนเป็นเวลา 03:00:00 น. ตรงเป๊ะตามที่กำหนดไว้ทันที