บนเซิร์ฟเวอร์ Ubuntu 20.04LTS ของฉัน ฉันมีงาน cron สำหรับการลบเคอร์เนลเวอร์ชันเก่าเพื่อป้องกันไม่ให้พาร์ติชัน /boot มีพื้นที่ว่างไม่เพียงพอ มันทำงานโดยการสอบถามกับ dpkg-แบบสอบถาม
สำหรับรายการที่ติดตั้ง ลินุกซ์อิมเมจ
บรรจุหีบห่อแล้วให้อาหารทั้งหมดยกเว้นสามคนสุดท้าย apt-get ล้าง -y
. ใช้งานได้ดีเกือบตลอดเวลา
ด้วยเหตุผลต่างๆ กัน กระบวนการนี้จะเลือกเคอร์เนลที่กำลังทำงานอยู่เพื่อนำออกด้วยเหตุผลหลายประการ
สิ่งนี้ไม่น่าจะเป็นปัญหา เนื่องจากตาม manpage ของมัน ฉลาดรับ
กับ
เดอะ -ย
ตัวเลือกควรยกเลิกในกรณีนี้
อย่างไรก็ตามในความเป็นจริงสิ่งนี้ทำให้งาน cron หยุดทำงานอย่างไม่มีกำหนด
เอาต์พุตมาตรฐานจากงาน ซึ่งบันทึกเป็นไฟล์ แสดง:
การลบ linux-image-5.4.0-100-generic (5.4.0-100.113) ...
debconf: ไม่สามารถเริ่มต้นส่วนหน้า: กล่องโต้ตอบ
debconf: (ไม่ได้ตั้งค่า TERM ดังนั้นส่วนหน้าของไดอะล็อกจึงไม่สามารถใช้งานได้)
debconf: ถอยกลับไปส่วนหน้า: Readline
การลบ linux-image-5.4.0-100-generic
--------------------------------------
คุณกำลังเรียกใช้เคอร์เนล (รุ่น 5.4.0-100-generic) และพยายามที่จะลบ
รุ่นเดียวกัน
ซึ่งจะทำให้ระบบไม่สามารถบูตได้เนื่องจากระบบจะลบออก
/boot/vmlinuz-5.4.0-100-generic และโมดูลทั้งหมดภายใต้ไดเร็กทอรี
/lib/modules/5.4.0-100-generic สิ่งนี้สามารถแก้ไขได้ด้วยสำเนาของเคอร์เนลเท่านั้น
รูปภาพและโมดูลที่เกี่ยวข้อง
ขอแนะนำให้ยกเลิกการลบเคอร์เนล เว้นแต่คุณจะเตรียมพร้อม
แก้ไขระบบหลังจากลบ
ยกเลิกการลบเคอร์เนลหรือไม่ [ใช่ไม่ใช่]
แผนผังกระบวนการ (ตัดตอนมาจาก ps -axf
) มีลักษณะดังนี้:
828 ? Ss 0:00 /usr/sbin/cron -f
92591 ? S 0:00 \_ /usr/sbin/CRON -f
92592 ? Ss 0:00 \_ /bin/sh -c /usr/local/sbin/remove_old_kernels.sh >> /var/log/remove_old_kernels.log 2>&1
92593 ? S 0:00 \_ /bin/bash /usr/local/sbin/remove_old_kernels.sh
92598 ? S 0:14 \_ apt-get purge -y linux-image-5.4.0-100-generic
92785 pts/0 Ss+ 0:00 \_ /usr/bin/dpkg --status-fd 26 --no-triggers --force-depends --abort-after=1 --remove linux-generic:amd64 linux-image -generic:amd64 linux-modules-extra-5.4.0-100-generic:amd64 linux-image-5.4.0-100-generic:amd64
92798 pts/0 S+ 0:00 \_ /bin/sh /var/lib/dpkg/info/linux-image-5.4.0-100-generic.prerm ลบ
92799 pts/0 S+ 0:00 \_ /usr/bin/perl -w /usr/share/debconf/frontend /usr/bin/linux-check-removal 5.4.0-100-generic
92809 pts/0 S+ 0:00 \_ /usr/bin/perl /usr/bin/linux-check-removal 5.4.0-100-generic
ดังนั้น ฉลาดรับ
ส่งคำขอเพื่อยืนยันทั้งๆที่ -ย
ตัวเลือก.
แย่กว่านั้น มันสังเกตเห็นด้วยซ้ำว่ามันไม่มีหนทางที่จะติดต่อใครก็ได้เพื่อหาคำตอบ แต่แทนที่จะยอมแพ้อย่างชาญฉลาด มันกลับสร้างสถานีเทียมขึ้นจากอากาศเบาบาง และตอนนี้รอคำตอบอย่างไร้สติ
ฉันจะหลีกเลี่ยงพฤติกรรมนั้นและป้องกันได้อย่างไร ฉลาดรับ
จากการถามคำถามใด ๆ เมื่อรันโดยไม่มีเทอร์มินัล?