最近のUbuntuではunattended-upgradesでセキュリティ更新をanacronから自動で適用することができるように初期で設定されています。
他にも一通りの動きを調べました。
事象
自身のUbuntu環境のunattended-upgradesのログを見ると以下のようなメッセージが出ていました。
/var/log/unattended-upgrades/unattended-upgrades.log
2021-07-04 21:57:47,276 WARNING System is on battery power, stopping
2021-07-05 06:20:17,150 WARNING System is on battery power, stopping
もしかして動いて無いかと思い、試しに unattended-upgrade
を直接打ってみても同じメッセージで動いて無いです。
$ sudo unattended-upgrade --dry-run --verbose
System is on battery power, stopping
原因
以下で停止しているようです。
def should_stop():
# type: () -> bool
"""
Return True if u-u needs to stop due to signal received or due to the
system started to run on battery.
"""
if SIGNAL_STOP_REQUEST:
logging.warning("SIGNAL received, stopping")
return True
try:
if apt_pkg.config.find_b("Unattended-Upgrade::OnlyOnACPower", True) \
and subprocess.call("on_ac_power") == 1:
logging.warning("System is on battery power, stopping")
return True
特にこの部分見てみれば良さそうです。
if apt_pkg.config.find_b("Unattended-Upgrade::OnlyOnACPower", True) \
and subprocess.call("on_ac_power") == 1:
対応
on_ac_power
まずは subprocess.call("on_ac_power") == 1
から。
Manで見てみると以下の通り。
$ man on_ac_power
ON_AC_POWER(1) General Commands Manual
NAME
on_ac_power - test whether computer is running on AC power
SYNOPSIS
on_ac_power
DESCRIPTION
on_ac_power checks whether the system is running on abundant power (such as AC mains, an USB charger, etc), as
opposed to battery power.
OPTIONS
None.
EXIT STATUS
0 (true) System is on mains power
1 (false) System is not on mains power
255 (false) Power status could not be determined
~省略~
実際に自身の環境で叩いてみると 1
となっています。
$ on_ac_power;echo $?
1
ここは変更する内容でも無いのでそのままにします。
Unattended-Upgrade::OnlyOnACPower
次に nattended-Upgrade::OnlyOnACPower
です。
ずっとコード繋ぎっぱなしのマシンなのですが、こちらがデフォルトでTrueとなっていました。
/etc/apt/apt.conf.d/50unattended-upgrades
// Download and install upgrades only on AC power
// (i.e. skip or gracefully stop updates on battery)
// Unattended-Upgrade::OnlyOnACPower "true";
これをFalseに変えます。
Unattended-Upgrade::OnlyOnACPower "false";
確認
後は実際に動かして確認しておきます。
# DryRun
sudo unattended-upgrade -d dry-run
# 即時実行
sudo unattended-upgrade -d