自動更新の確認と設定方法
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-upgradeskazulog@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-Lists | 1 なら apt update 相当を毎日実行する |
APT::Periodic::Unattended-Upgrade | 1 なら更新の適用を毎日実行する |
複数の設定ファイルを合わせた最終的な値は 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」 という名前のとおり、シャットダウン時に更新処理の完了を待つためのユニットです。定期実行を担っているのはこのサービスではなくタイマーのため、混同しないよう注意してください。
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-upgrades の Allowed-Origins で決まります。
grep -E 'distro_codename' /etc/apt/apt.conf.d/50unattended-upgradeskazulog@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 -vkazulog@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 -vkazulog@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.pkgskazulog@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.logkazulog@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-upgradesUnattended-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-coreAllowed 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-Reboot | true で、再起動が必要な場合に再起動する |
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-upgrades の Unattended-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 26.04 LTS Server
- Ubuntu 26.04 LTS Server システム最適化 apt update/upgrade
- タイムゾーンの日本時間(JST)への変更 Ubuntu 26.04 LTS Server
- Ubuntu 26.04 LTS Server のユーザー作成と sudo 権限の設定
- Ubuntu 26.04 LTS Server の SSH サーバー設定(公開鍵認証)
- Ubuntu 26.04 LTS Server のサービス管理(systemctl)とログ確認(journalctl)
- Ubuntu 26.04 LTS Server の自動更新設定(unattended-upgrades)
- neovim 公式サイトから最新バージョンをインストールする手順 Ubuntu 26.04 LTS Server
- Ubuntu 26.04 LTS Server ネットワークの設定