По умолчанию, необслуживаемые обновления триггер anacron, и он только запускается при работе питания переменным током и не запускается, работая от батареи. Этот beviavor легко понять для предотвращения ненужного питания. Так или иначе я хочу позволить необслуживаемым обновлениям запускаться, даже если машина, работающая от батареи, потому что некоторые народы моих друзей, включая меня, всегда используют свой ноутбук только на батарее. Следующий прием не работает над 16,04:
Набор ANACRON_RUN_ON_BATTERY_POWER=yes
в /etc/default/anacron
Для Ubuntu 16.04, там другой способ позволить anacron или необслуживаемые обновления, начать даже работать от батареи?
Приемы по следующей теме не работают над 16,04: Выполненный anacron, даже когда на батарее (ноутбук)
Редактирование 1:
Согласно просьбе я использовал команду dpkg -L anacron | xargs grep -lwi power 2>/dev/null
из комментария waltinator. Затем я изменяюсь как это, но никакое изменение, необслуживаемые обновления все еще не запускаются на батарее:
. Прокомментируйте следующие строки в /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
После поиска в течение долгого времени, чтобы позволить 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
На 16,04, можно записать systemd файл для достижения этого. Создайте файл /etc/systemd/system/anacron.service.d/override.conf
со следующим содержанием:
[Unit]
ConditionACPower=
ConditionACPower=false
Обратите внимание, что некоторые cronjobs независимо проверяют на источник питания и отказываются работать на заряде батареи, например. /etc/cron.daily/mlocate
согласно 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
если это работает