มองไปรอบ ๆ เพื่อให้เข้าใกล้สาเหตุที่แท้จริง
ปัญหาดูเหมือนว่าสคริปต์จะทำงานเมื่อปิดเครื่อง
ฉันระบุไฟล์ที่เกี่ยวข้องกับ:
find /etc/systemd -name *unattended*
ซึ่งให้สคริปต์ systemd ที่เกี่ยวข้องให้ฉัน:
/etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
ซึ่งจากนั้นบอกฉันว่าสคริปต์ทำงานเมื่อปิดเครื่อง:
/usr/share/unattended-upgrades/unattended-upgrade-shutdown
สำรวจลึกเพื่อค้นหาสาเหตุที่แท้จริง
ภายในสคริปต์นี้มีส่วนในบรรทัด 120 ที่เกี่ยวข้องกับส่วนใน /etc/apt/apt.conf.d/50unattended-upgrades -> Unattended-Upgrade :: InstallOnShutdown
บรรทัดที่ 120 ของ / usr / share / unattended-upgrade / unattended-upgrade-shutdown:
if apt_pkg.config.find_b("Unattended-Upgrade::InstallOnShutdown", False):
ปัญหา: คาดว่าคำหลัก "เท็จ" ในขณะที่เราควรเพิ่ม "false" (การเปรียบเทียบสตริงที่แน่นอน)!
วิธีการแก้
ฉันสามารถแก้ไข / แก้ปัญหาการปิดเครื่องใน 3 วิธี:
วิธีแก้ปัญหา A
- เขียน "เท็จ" แทน "false" ใน /etc/apt/apt.conf.d/50unattended-upgrades
การตั้งค่านี้จะอัปเกรดอย่างปลอดภัยจนกว่าจะมีการแก้ไขจริงเนื่องจากไฟล์ที่เราเปลี่ยนแปลงที่นี่จะไม่ถูกเขียนทับโดยการอัปเดตการอัปเกรดแบบไม่ต้องใส่ข้อมูล ปัญหา: เมื่อสาเหตุของปัญหาได้รับการแก้ไขสิ่งนี้จะส่งผลให้มีการปิดเครื่องอีกครั้งดังนั้นฉันขอแนะนำให้รวมสิ่งนี้กับ Workaround B
หรือ: วิธีแก้ปัญหา B
- ลดเวลารอใน /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service จากค่าเริ่มต้นเป็น 15 วินาที:
vim /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
[บริการ]
พิมพ์ = Oneshot
ExecStart = / usr / share / แบบอัตโนมัติอัพเกรด / ไม่ต้องใส่-upgrade-ปิด
TimeoutStartSec = 15
การตั้งค่านี้ไม่อัปเกรดอย่างปลอดภัยเนื่องจากไฟล์ที่เราเปลี่ยนแปลงที่นี่อาจถูกเขียนทับโดยการอัปเดตแบบไม่ต้องใส่ข้อมูล นอกจากนี้มันอยู่ไกลจากการแก้ไขบางอย่าง แต่มันจะทำให้แน่ใจว่าระบบของคุณจะไม่รอหลายนาทีเมื่อปิดเครื่อง โปรดทราบว่าหลังจากการอัปเกรดแบบไม่ต้องมีการอัพเกรดคุณอาจต้องตั้งค่านี้อีกครั้ง!
หรือ: แก้ไข C (ต้องรายงานต้นน้ำ)
- แก้ไข / usr / share / unattended-upgrade / unattended-upgrade-shutdown เพื่อคาดหวังว่า "false" แทนที่จะเป็น "False"
patching / usr / share / unattended-upgrade / unattended-upgrade-shutdown:
--- / tmp / unattended-upgrade-shutdown 2017-02-03 14: 53: 03.238103238 +0100
+++ / tmp / ไม่ต้องดูแล - อัพเกรด - ปิดระบบ _ แก้ไข 2017-02-03 14: 53: 17.685589001 +0100
@@ -117,7 +117,7 @@
# รัน
p = ไม่มี
apt_pkg.init_config ()
- ถ้า apt_pkg.config.find_b ("Unattended-Upgrade :: InstallOnShutdown", เท็จ):
+ ถ้า apt_pkg.config.find_b ("Unattended-Upgrade :: InstallOnShutdown", false):
env = copy.copy (os.environ)
env ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1"
logging.debug ("เริ่มต้นการอัพเกรดแบบอัตโนมัติในโหมดปิดเครื่อง")
ข้อสรุป
tbh เฉพาะอันสุดท้ายคือการแก้ไขที่แท้จริง ตัวเลือกอื่น ๆ ทั้งสองเป็นเพียงการแก้ปัญหาจนกว่าจะมีการแก้ไขจริง
สิ่งนี้จะต้องทำในขั้นต้นและส่งผลต่อทั้ง Debian (ทดสอบบน Debian Stretch) และ Ubuntu (ทดสอบบน Ubuntu 16.04.1) สำหรับการแจกแจงทั้งสองแบบ
ฉันได้เปิดรายงานข้อผิดพลาดที่นี่: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611