如何允许无人值守升级甚至在使用电池供电时也能开始?

如何允许无人值守升级甚至在使用电池供电时也能开始?

默认情况下,无人值守升级由 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 在使用电池时也能启动后,我放弃了。因为我找到了一个脚本,可以在机器使用电池运行时启动无人值守升级,这正是我最初想要的。

如果机器使用电池运行,则运行无人值守升级,非常适合笔记本电脑。登录时执行脚本。要求:

  • 已安装并启用无人值守升级(关联
  • 允许使用 sudoers 执行无人值守升级和 apt 更新,无需输入密码(关联
  • 登录时运行脚本(关联

脚本 :

#!/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是否有效

相关内容