默认情况下,无人值守升级由 anacron 触发,并且仅在使用交流电时启动,使用电池时不启动。这种行为很容易理解,可以避免浪费电力。无论如何,我希望即使机器使用电池运行,也能允许无人值守升级启动,因为我的朋友中有些人(包括我)总是只使用电池来使用笔记本电脑。以下技巧在 16.04 上不起作用:
设置ANACRON_RUN_ON_BATTERY_POWER=yes
/etc/default/anacron
对于 Ubuntu 16.04,是否有其他方法可以允许 anacron 或无人值守升级甚至在使用电池运行时启动?
以下主题上的技巧在 16.04 上不起作用:即使在使用电池的情况下也能运行 anacron(笔记本电脑)
编辑1:
根据要求,我使用了 waltinator 评论中的命令dpkg -L anacron | xargs grep -lwi power 2>/dev/null
。然后,我像这样更改,但没有变化,无人值守升级仍然无法在电池上运行:
. 注释掉以下几行/etc/init.d/anacron
# if test x"$ANACRON_RUN_ON_BATTERY_POWER" != x"yes" && test -x /usr/bin/on_ac_power
# then
# /usr/bin/on_ac_power >/dev/null
# if test $? -eq 1
# then
# log_progress_msg "deferred while on battery power"
# log_end_msg 0
# exit 0
# fi
#fi
答案1
/etc/systemd/system/anacron.service.d/override.conf
在 16.04 上,您可以编写一个 systemd 文件来实现此目的。创建包含以下内容的文件:
[Unit]
ConditionACPower=
ConditionACPower=false
请注意,一些 cronjobs 会独立检查电源并拒绝使用电池供电,例如/etc/cron.daily/mlocate
答案2
在搜索了很长时间让 anacron 在使用电池时也能启动后,我放弃了。因为我找到了一个脚本,可以在机器使用电池运行时启动无人值守升级,这正是我最初想要的。
如果机器使用电池运行,则运行无人值守升级,非常适合笔记本电脑。登录时执行脚本。要求:
脚本 :
#!/bin/bash
sleep 6m
level=$(cat /sys/class/power_supply/BAT0/capacity)
status=$(cat /sys/class/power_supply/BAT0/status)
lastupdate=$(cat /var/log/unattended-upgrades/unattended-upgrades.log | grep `date -I` | tail -1)
# Exit if not discharging
if [ "${status}" != "Discharging" ]; then
exit 0
fi
# Exit if updated today
if [ -n "$lastupdate" ]; then
exit 0
fi
# Update
if [ "${level}" -ge 70 ]; then
sudo apt update && sudo unattended-upgrades
fi
答案3
按照https://github.com/mvo5/unattended-upgrades/blob/master/data/50unattended-upgrades.Ubuntu您可以向文件添加以下选项/etc/apt/apt.conf.d/50unattended-upgrades
:
Unattended-Upgrade::OnlyOnACPower "false";
检查sudo unattended-upgrades --verbose
是否有效