安装后unattended-upgrades
,10 次关机/重启中有 9 次会在“启动无人值守升级关机”时挂起。此挂起会使关机过程停滞 5-10 分钟。
如果我通过禁用无人值守升级/etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgrades
,就会出现问题。
如果我在关机/重启()之前终止服务,sudo service unattended-upgrades stop
问题仍然会出现。
如果我删除该包(sudo apt remove unattended-upgrades
),问题就不会再出现。
这发生在新安装的版本上Ubuntu Server 16.04.1
(unattended-upgrades
通过安装 GUI 或手动安装无人值守升级安装)
两者都Kern.log & syslog
没有显示关机过程(我相信是因为文件系统已经卸载)
有其他人遇到或修复过这个问题吗?我快疯了,想解决它。
答案1
环顾四周,寻找根本原因
问题似乎出在关机时运行的脚本。
我识别了相应的文件:
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
[服务] 类型=oneshot ExecStart=/usr/share/无人值守升级/无人值守升级关闭 超时开始时间=15
此设置不适用于升级,因为我们在此处更改的文件可能会被无人值守升级的更新覆盖。除此之外,它确实无法修复某些问题,但它可以确保您的系统在关闭时不会等待几分钟。请记住,在无人值守升级后,您可能需要再次设置它!
或者:修复 C(必须向上游报告)
- 修复 /usr/share/unattended-upgrades/unattended-upgrades-shutdown 以期望“false”而不是“False”
修补/usr/share/unattended-upgrades/unattended-upgrade-shutdown:
--- /tmp/无人值守升级关闭 2017-02-03 14:53:03.238103238 +0100 +++ /tmp/无人值守升级-关闭_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", False): + 如果 apt_pkg.config.find_b("无人值守升级::InstallOnShutdown", false): env = 复制.复制(os.environ) 环境[“UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN”] = “1” logs.debug("在关机模式下启动无人值守升级")
结论
老实说,只有最后一个才是真正的解决方案。其他两个选项都只是解决方法,直到真正的解决方案得以实施。
这必须在上游完成,因为这会影响两个发行版的 Debian(在 Debian Stretch 上测试)和 Ubuntu(在 Ubuntu 16.04.1 上测试)。
我在这里打开了一个错误报告:https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611
答案2
答案3
作为一种解决方法,我使用这个脚本来修复它:
#!/usr/bin/env bash
sed -i '/if apt_pkg.config.find_b/s/False/false/' /usr/share/unattended-upgrades/unattended-upgrade-shutdown
exit
希望它能很快被上游。