apt / unattended-upgrades停止关闭
安装unattended-upgrades
后,10次关机/重启中有9次会挂起,同时“启动无人值守升级关机”。 这个挂起使停机过程停顿5-10分钟。
如果我通过/etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgrades
,则会出现问题。
如果我在shutdown / reboot( sudo service unattended-upgrades stop
)之前终止服务,问题仍然存在。
如果我删除包( sudo apt remove unattended-upgrades
),问题就不再发生了。
这发生在新安装的Ubuntu Server 16.04.1
版本上(通过安装GUI安装无人值守升级或手动安装无人值守升级)
Kern.log & syslog
都没有显示关闭进程(我相信因为文件系统已经卸载)
还有其他人看过或解决了这个问题吗? 疯狂试图解决它。
四处寻找更接近根本原因
问题似乎是在关机时运行的脚本。
我确定了相应的文件:
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中的部分相关的部分 – >无人值守升级:: 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”
此设置升级安全,直到提供真正的修复,因为我们在此更改的文件不会被无人值守升级的更新覆盖。 问题:当根本原因得到修复时,这将导致再次停止关闭,因此我建议将其与Workaround B结合使用。
或:解决方法B.
- 将/etc/systemd/system/shutdown.target.wants/unattended-upgrades.service中的等待时间从默认值减少到15秒:
vim /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
[服务] TYPE =单稳 ExecStart =在/ usr /共享/无人参与升级/无人值守升级关机 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(“无人值守升级:: InstallOnShutdown”,则为假): +如果apt_pkg.config.find_b(“无人值守升级:: 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
作为一种解决方法,我使用此脚本来修复它:
#!/usr/bin/env bash sed -i '/if apt_pkg.config.find_b/s/False/false/' /usr/share/unattended-upgrades/unattended-upgrade-shutdown exit
希望它很快就会被上流。
这已在systemd中修复
https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1654600
(原始报告: https : //bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611 )