环顾四周以更深入地了解根本原因
问题似乎是脚本在关闭时运行。
我用以下代码标识了相应的文件:
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中的部分相关
/ usr / share / unattended-upgrades / unattended-upgrade-shutdown的第120行:
if apt_pkg.config.find_b("Unattended-Upgrade::InstallOnShutdown", False):
问题:它期望关键字“ False”,而在apt conf中,我们应该添加“ false”(精确的字符串比较)!
解
我可以通过3种不同的方式修复/解决停机问题:
解决方法A
- 在/etc/apt/apt.conf.d/50unattended-upgrades中写“ False”而不是“ false”
此设置在提供真正的修补程序之前是安全的,因为我们在此处更改的文件不会因无人值守的升级而被覆盖。问题:根本原因得到解决后,这将导致停机再次停止,因此我建议将其与解决方法B结合使用。
或:解决方法B
- 将/etc/systemd/system/shutdown.target.wants/unattended-upgrades.service中的等待时间从默认值减少到15秒:
vim /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
[服务]
类型=单发
ExecStart = / usr / share / unattended-upgrades / unattended-upgrade-shutdown
TimeoutStartSec = 15
此设置并非安全升级,因为我们在此处更改的文件可能会因无人值守升级而被覆盖。除此之外,它确实还不能解决问题,但可以确保系统在关闭时不会等待几分钟。请记住,在无人值守升级之后,您可能必须重新设置!
或:修复C(必须在上游报告)
- 修复/ usr / share / unattended-upgrades / unattended-upgrades-shutdown以期望“ false”而不是“ False”
修补/ usr / share / unattended-upgrades / unattended-upgrade-shutdown:
--- / tmp / unattended-upgrade-shutdown 2017-02-03 14:53:03.238103238 +0100
+++ / tmp / unattended-upgrade-shutdown_fix 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”,否):
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