メインコンテンツへスキップ
  1. Linux 関連記事一覧/
  2. Ubuntu 26.04 LTS Server/

Ubuntu 26.04 LTS Server の自動更新設定(unattended-upgrades)

目次

自動更新の確認と設定方法

Ubuntu 26.04 LTS Server は、インストール直後からセキュリティ更新を自動で適用する設定になっています。その仕組みの確認方法と、更新対象・自動再起動・実行間隔の変更方法、無効化の方法を解説します。

自動更新は次の2つの部品で動きます。

部品役割
unattended-upgrades パッケージ更新の適用を行う本体。unattended-upgrade コマンドを提供する
systemd のタイマー定期実行のきっかけ。apt-daily.timer(パッケージリストの更新とダウンロード)と apt-daily-upgrade.timer(更新の適用)の2本

自動更新が有効かどうかの確認

パッケージの導入状況と、/etc/apt/apt.conf.d/20auto-upgrades の設定を確認します。この2つの値が "1" であれば自動更新が有効です。

自動更新の設定確認コマンド
dpkg -l unattended-upgrades
cat /etc/apt/apt.conf.d/20auto-upgrades
自動更新の設定確認 実行例
kazulog@sv1:~$ dpkg -l unattended-upgrades | tail -1
ii  unattended-upgrades 2.12ubuntu9  all          automatic installation of security upgrades
kazulog@sv1:~$ cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
kazulog@sv1:~$
項目内容
APT::Periodic::Update-Package-Lists1 なら apt update 相当を毎日実行する
APT::Periodic::Unattended-Upgrade1 なら更新の適用を毎日実行する

複数の設定ファイルを合わせた最終的な値は apt-config dump で確認します。

最終的な設定値の確認 実行例
kazulog@sv1:~$ apt-config dump APT::Periodic
APT::Periodic "";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "1";
kazulog@sv1:~$

systemctl status unattended-upgrades で表示されるサービスは 「Unattended Upgrades Shutdown」 という名前のとおり、シャットダウン時に更新処理の完了を待つためのユニットです。定期実行を担っているのはこのサービスではなくタイマーのため、混同しないよう注意してください。

unattended-upgrades.service の表示
kazulog@sv1:~$ systemctl status unattended-upgrades --no-pager -l | head -8 | cat
● unattended-upgrades.service - Unattended Upgrades Shutdown
     Loaded: loaded (/usr/lib/systemd/system/unattended-upgrades.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-09-10 16:18:20 JST; 31s ago
 Invocation: 4c3cdd457ec840ce8982daa12d140003
       Docs: man:unattended-upgrade(8)
   Main PID: 1090 (unattended-upgr)
      Tasks: 2 (limit: 1486)
     Memory: 15M (peak: 15.2M)
kazulog@sv1:~$

実行タイミングの確認

タイマーの次回実行時刻は systemctl list-timers で確認できます。

タイマーの確認コマンド
systemctl list-timers 'apt-daily*'
タイマーの確認 実行例
kazulog@sv1:~$ systemctl list-timers 'apt-daily*' --no-pager
NEXT                        LEFT LAST                        PASSED UNIT                    ACTIVATES
Fri 2026-09-11 02:45:01 JST  10h Thu 2026-09-10 13:30:25 JST      - apt-daily.timer         apt-daily.service
Fri 2026-09-11 06:05:55 JST  13h Thu 2026-09-10 13:30:25 JST      - apt-daily-upgrade.timer apt-daily-upgrade.service

2 timers listed.
Pass --all to see loaded but inactive timers, too.
kazulog@sv1:~$

タイマーの定義は systemctl cat で確認します。

タイマーの定義 実行例
kazulog@sv1:~$ systemctl cat apt-daily-upgrade.timer | cat
# /usr/lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true

[Install]
WantedBy=timers.target
kazulog@sv1:~$
項目内容
OnCalendar=*-*-* 6:00毎日6時に実行する
RandomizedDelaySec=60m最大60分のランダムな遅延を入れる(多数のサーバーが同時にアクセスするのを避けるため)
Persistent=true実行時刻に電源が入っていなかった場合、次回起動時に実行する

上の実行例で次回実行が6時ちょうどではないのは、この遅延によるものです。

更新対象の確認

どのリポジトリからの更新を適用するかは /etc/apt/apt.conf.d/50unattended-upgradesAllowed-Origins で決まります。

更新対象の確認コマンド
grep -E 'distro_codename' /etc/apt/apt.conf.d/50unattended-upgrades
更新対象の確認 実行例
kazulog@sv1:~$ grep -nE 'distro_codename' /etc/apt/apt.conf.d/50unattended-upgrades | head -12
7:	"${distro_id}:${distro_codename}";
8:	"${distro_id}:${distro_codename}-security";
13:	"${distro_id}ESMApps:${distro_codename}-apps-security";
14:	"${distro_id}ESM:${distro_codename}-infra-security";
15://	"${distro_id}:${distro_codename}-updates";
16://	"${distro_id}:${distro_codename}-proposed";
17://	"${distro_id}:${distro_codename}-backports";

// で始まる行はコメントです。既定では -updates(セキュリティ以外の更新)と -proposed-backports が対象外になっており、セキュリティ更新だけが自動的に適用されます。

手動で実行する

自動更新の動作は unattended-upgrade コマンドで手動でも実行できます。コマンド名は末尾に s が付きません(パッケージ名とサービス名は unattended-upgrades)。

--dry-run を付けると、実際には変更せずに対象だけを確認できます。

更新対象の確認コマンド(変更しない)
sudo unattended-upgrade --dry-run -v
更新対象の確認 実行例
kazulog@sv1:~$ sudo unattended-upgrade --dry-run -v
Starting unattended upgrades script
Allowed origins are: o=Ubuntu,a=resolute, o=Ubuntu,a=resolute-security, o=UbuntuESMApps,a=resolute-apps-security, o=UbuntuESM,a=resolute-infra-security
Initial blacklist: 
Initial whitelist (not strict): 
Option --dry-run given, *not* performing real actions
Packages that will be upgraded: bind9-dnsutils bind9-host bind9-libs bpftool bsdextrautils bsdutils cpio curl diffutils dirmngr eject fdisk gnu-coreutils gnupg gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client gpgconf gpgsm gpgv libattr1 libblkid1 libbz2-1.0 libc-bin libc-dev-bin libc-gconv-modules-extra libc6 libc6-dev libcurl3t64-gnutls libcurl4t64 libevent-core-2.1-7t64 libfdisk1 libgcrypt20 liblastlog2-2 libmount1 libpam-modules libpam-modules-bin libpam-runtime libpam0g libperl5.40 libpython3.14 libpython3.14-minimal libpython3.14-stdlib libsmartcols1 libssh2-1t64 libssl3t64 libudisks2-0 libuuid1 linux-headers-generic linux-headers-virtual linux-image-virtual linux-libc-dev linux-perf linux-tools-common linux-virtual locales login mount openssl openssl-provider-legacy perl perl-base perl-modules-5.40 python3-pyasn1 python3.14 python3.14-gdbm python3.14-minimal sudo-rs udisks2 util-linux util-linux-extra uuid-runtime vim vim-common vim-runtime vim-tiny xxd zlib1g
/snip/
All upgrades installed
The list of kept packages can't be calculated in dry-run mode.

Allowed origins are: に対象のリポジトリが、Packages that will be upgraded: に適用されるパッケージが並びます。実際に適用するには --dry-run を外します。

更新の適用コマンド
sudo unattended-upgrade -v
更新の適用 実行例
kazulog@sv1:~$ sudo unattended-upgrade -v
Starting unattended upgrades script
Allowed origins are: o=Ubuntu,a=resolute, o=Ubuntu,a=resolute-security, o=UbuntuESMApps,a=resolute-apps-security, o=UbuntuESM,a=resolute-infra-security
Initial blacklist: 
Initial whitelist (not strict): 
Packages that will be upgraded: bind9-dnsutils bind9-host bind9-libs bpftool bsdextrautils bsdutils cpio curl diffutils dirmngr eject fdisk gnu-coreutils gnupg gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client gpgconf gpgsm gpgv libattr1 libblkid1 libbz2-1.0 libc-bin libc-dev-bin libc-gconv-modules-extra libc6 libc6-dev libcurl3t64-gnutls libcurl4t64 libevent-core-2.1-7t64 libfdisk1 libgcrypt20 liblastlog2-2 libmount1 libpam-modules libpam-modules-bin libpam-runtime libpam0g libperl5.40 libpython3.14 libpython3.14-minimal libpython3.14-stdlib libsmartcols1 libssh2-1t64 libssl3t64 libudisks2-0 libuuid1 linux-headers-generic linux-headers-virtual linux-image-virtual linux-libc-dev linux-perf linux-tools-common linux-virtual locales login mount openssl openssl-provider-legacy perl perl-base perl-modules-5.40 python3-pyasn1 python3.14 python3.14-gdbm python3.14-minimal sudo-rs udisks2 util-linux util-linux-extra uuid-runtime vim vim-common vim-runtime vim-tiny xxd zlib1g
Writing dpkg log to /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
/snip/

No VM guests are running outdated hypervisor (qemu) binaries on this host.
All upgrades installed

再起動が必要かどうかの確認

カーネルや libc の更新が適用されると、再起動を促すファイルが作成されます。自動更新は再起動までは行いません(既定の設定の場合)。

再起動要否の確認コマンド
ls -l /var/run/reboot-required
cat /var/run/reboot-required.pkgs
再起動要否の確認 実行例
kazulog@sv1:~$ ls -l /var/run/reboot-required /var/run/reboot-required.pkgs
-rw-r--r-- 1 root root 32 Sep 10 16:37 /var/run/reboot-required
-rw-r--r-- 1 root root 46 Sep 10 16:37 /var/run/reboot-required.pkgs
kazulog@sv1:~$ cat /var/run/reboot-required
*** System restart required ***
kazulog@sv1:~$ head -5 /var/run/reboot-required.pkgs
libc6
linux-image-7.0.0-31-generic
linux-base
kazulog@sv1:~$

.pkgs には、再起動を必要とするパッケージ名が並びます。

ログの確認

自動更新のログは /var/log/unattended-upgrades/ に保存されます。

ファイル内容
unattended-upgrades.log実行の記録(対象パッケージ、開始と終了)
unattended-upgrades-dpkg.logパッケージ展開時の詳細なログ
unattended-upgrades-shutdown.logシャットダウン時に更新を待った記録
ログの確認コマンド
sudo tail /var/log/unattended-upgrades/unattended-upgrades.log
ログの確認 実行例
kazulog@sv1:~$ sudo ls -l /var/log/unattended-upgrades/
total 80
-rw-r--r-- 1 root adm  66297 Sep 10 16:38 unattended-upgrades-dpkg.log
-rw-r--r-- 1 root root     0 Sep 10 13:30 unattended-upgrades-shutdown.log
-rw-r--r-- 1 root root  5069 Sep 10 16:38 unattended-upgrades.log

設定を変更する

セキュリティ以外の更新も対象にする

50unattended-upgrades-updates の行のコメント(//)を外します。

設定ファイルの編集コマンド
sudo vi /etc/apt/apt.conf.d/50unattended-upgrades
-updates も対象にする設定
Unattended-Upgrade::Allowed-Origins {
	"${distro_id}:${distro_codename}";
	"${distro_id}:${distro_codename}-security";
	"${distro_id}:${distro_codename}-updates";
};

変更後に --dry-run を実行すると、対象が増えていることを確認できます。

変更後の対象の確認 実行例
kazulog@sv1:~$ sudo unattended-upgrade --dry-run -v 2>&1 | head -6
Starting unattended upgrades script
Allowed origins are: o=Ubuntu,a=resolute, o=Ubuntu,a=resolute-security, o=UbuntuESMApps,a=resolute-apps-security, o=UbuntuESM,a=resolute-infra-security, o=Ubuntu,a=resolute-updates
Initial blacklist: 
Initial whitelist (not strict): 
Option --dry-run given, *not* performing real actions
Packages that will be upgraded: base-files libaudit-common libaudit1 libflashrom1 motd-news-config python-apt-common python3-apt python3-distupgrade ubuntu-release-upgrader-core

Allowed origins are: の末尾に a=resolute-updates が加わり、それまで対象外だったパッケージが選ばれています。

更新後に自動で再起動する

再起動が必要になった場合に自動で再起動させるには、次の設定を追加します。設定ファイルは 50unattended-upgrades に直接書いてもよいですが、番号の大きい別ファイルに書くと元のファイルを変更せずに済みます。

自動再起動の設定コマンド
printf 'Unattended-Upgrade::Automatic-Reboot "true";\nUnattended-Upgrade::Automatic-Reboot-Time "03:00";\n' | sudo tee /etc/apt/apt.conf.d/51custom-reboot
項目内容
Automatic-Reboottrue で、再起動が必要な場合に再起動する
Automatic-Reboot-Time再起動する時刻。"now" を指定すると更新直後に再起動する

この設定を入れて更新を適用すると、更新の最後に再起動が予約されます。

自動再起動が予約された 実行例
kazulog@sv1:~$ sudo unattended-upgrade -v
Starting unattended upgrades script
/snip/
All upgrades installed
Found /var/run/reboot-required, rebooting
Shutdown msg: b"Reboot scheduled for Fri 2026-09-11 03:00:00 JST, use 'shutdown -c' to cancel."
予約された再起動は sudo shutdown -c で取り消せます。Automatic-Reboot-Time を業務時間内に設定すると、更新のたびにサービスが停止する可能性があります。設定する場合は影響のない時刻を指定してください。

特定のパッケージを更新対象から除外する

更新したくないパッケージは Package-Blacklist に列挙します。正規表現で指定します。

特定パッケージを除外する設定
Unattended-Upgrade::Package-Blacklist {
	"nginx";
	"^linux-";
};

自動更新を無効にする

無効化の方法は3つあり、影響する範囲が異なります。

方法コマンド影響
更新の適用だけを止める20auto-upgradesUnattended-Upgrade"0" にするパッケージリストの更新は続く。推奨
すべての定期処理を止める20auto-upgrades の両方を "0" にするapt update 相当も行われなくなる
タイマーごと止めるsudo systemctl disable --now apt-daily-upgrade.timerタイマーが起動しなくなる。パッケージを再インストールすると戻ることがある
自動更新を無効にする 実行例
kazulog@sv1:~$ printf 'APT::Periodic::Update-Package-Lists "0";\nAPT::Periodic::Unattended-Upgrade "0";\n' | sudo tee /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
kazulog@sv1:~$ apt-config dump APT::Periodic::Unattended-Upgrade
APT::Periodic::Unattended-Upgrade "0";
kazulog@sv1:~$ sudo systemctl disable --now apt-daily-upgrade.timer
Removed '/etc/systemd/system/timers.target.wants/apt-daily-upgrade.timer'.
kazulog@sv1:~$ systemctl list-timers 'apt-daily*' --all --no-pager
NEXT                        LEFT LAST                        PASSED UNIT            ACTIVATES
Fri 2026-09-11 05:56:09 JST  13h Thu 2026-09-10 13:30:25 JST      - apt-daily.timer apt-daily.service

1 timers listed.
kazulog@sv1:~$

list-timers から apt-daily-upgrade.timer が消えていることを確認できます。元に戻す場合は enable --now を実行し、設定ファイルの値を "1" に戻します。

sudo dpkg-reconfigure --priority=low unattended-upgrades を実行すると、対話形式で有効・無効を切り替えられます。この操作は 20auto-upgrades を書き換えます。

検証環境と実行ログ

本記事の実行例は、CML 上の Ubuntu 26.04 LTS Server(unattended-upgrades 2.12ubuntu9)で採取したものです。各手順の実行ログを以下からダウンロードできます。

手順実行ログ
初期状態(設定・タイマー・更新対象)log
更新対象の確認(–dry-run)log
更新対象がどのリポジトリにあるかの確認log
更新の適用log
再起動要否とログの確認log
-updates を対象に追加log
自動再起動の設定と実行log
予約された再起動の取り消しlog
自動更新の無効化と再有効化log
設定を既定に戻すlog

参考リンク

Ubuntu Server documentation: Automatic updates

関連記事

Ubuntu 公式ページ