Ubuntu 16.04: 無人アップグレードがランダムな時間に実行される

Ubuntu 16.04: 無人アップグレードがランダムな時間に実行される

セキュリティ パッケージをインストールし、インストールが完了したらメールで通知するように unattended-upgrades を構成しました。

インストールが非常にランダムな時間に行われることに気づきました。最新バージョンでは、cron.daily の実行時間から最大 30 分のランダムな遅延が追加されていることがわかっています。

しかし、私が経験している遅延はそれよりもはるかに大きいです。午前 9 時、午後 3 時、午前 12 時に無人アップグレードが実行されているのがわかります... ログにも同じことが示されているため、メールの配信に時間がかかっているだけではありません。

無人アップグレード タスクは cron.daily の最初のタスクです。つまり、実行時間が長い以前のタスクはないということです。

同じような経験をした人はいますか?

答え1

これをデバッグした後、解決策を見つけました。

この問題の根本的な原因は、Ubuntu 16.04 以降では、una​​ttended-upgrades が cron ではなく systemd を使用して、ランダムな大きな遅延で更新をスケジュールしていることにあります。

/lib/systemd/system/apt-daily.timer構成は

OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h

これは、最大 12 時間のランダムな遅延を伴い、1 日に 2 回、6:00 と 18:00 に実行されることを意味します。これは実稼働環境では常に許容できるとは限らないため、これらの設定を上書きする必要がありました。

パッケージ設定ファイルを変更しないために、私はオーバーライドを定義しました。/etc/systemd/system/apt-daily.timer.d/override.confアップデート: ファイル名と場所の詳細については、この回答の下部にある編集を読んでください。多少変更される可能性があります。

そこで私は

[Timer]
OnCalendar=
OnCalendar=06:00
RandomizedDelaySec=1h

無人アップグレードを 6:00 に実行し、さらに最大 1 時間のランダムな遅延を加える。

その後、タイマーを再起動しましたsystemctl restart apt-daily.timer(最終的にはデーモンをリロードする必要があります)。

無人アップデートが再び予測可能な時間に実行されるようになりました。

編集: Ubuntu 18.04では少し変更があったようです。オーバーライドは以下に保存されるようになりました。/etc/systemd/system/apt-daily-upgrade.timer.d/override.confそして次のようになります:

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=1h

@PerlDuckは、以下のコメントで、正しい名前と場所でオーバーライドファイルを作成する方法について言及しています。手動でファイルを作成する代わりに、以下を実行することを検討してください。sudo systemctl edit apt-daily.timer

答え2

無人アップグレード時間を更新する最良の方法は、さまざまなソースから収集し、当社のシステムでテストした結果、systemctlコマンドを排他的に使用する編集する適切なファイルを探す手間が省けます。

確実に知っておく必要があるのはサービス名だけです。私たちの場合、それはapt-daily-upgrade(不明な場合は、 で検索してください$ systemctl | grep apt)。systemd サービスにタイマーが定義されている場合、 として参照される#{service_name}.timerため、これはapt-daily-upgrade.timer私たちにとって重要です。

システム構成は編集できないので、デフォルトのタイマー設定を上書きするsystemd で。そのためには、元の設定の一部をコピーして編集する必要があるので、まずそれを示しましょう。

$ systemctl cat apt-daily-upgrade.timer 
# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

セクションのOnCalendarと の値を更新する必要があります。次のコマンドを使用してオーバーライド構成ファイルを作成しましょう。RandomizedDelaySec[Timer]

$ systemctl edit apt-daily-upgrade.timer

これにより、空のファイルを含むエディターが開き、[Timer]少なくとも次の修正セクションをそこに配置する必要があります。

[Timer]
# Reset the system calendar config first
OnCalendar=
# Set a new calendar timer with a 60 minute threshold
OnCalendar=*-*-* 21:00
RandomizedDelaySec=60m

ご覧のとおり、OnCalendar自動更新を朝ではなく夕方に実行するように値を更新しました。OnCalendarその上の空白行は、この設定値は添加物つまり、複数回指定することができ、空白の値に設定すると、以前のOnCalendar値 (システム構成の値) がすべてリセットされます。

ファイルを保存したら、上記のように再度実行して、systemd がそれを認識していることを確認できます ( を実行する必要はありませんsystemctl daemon-reloadeditコマンドはエディターを終了するときに自動的にこれを実行します) systemctl

$ systemctl cat apt-daily-upgrade.timer

# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

# /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
[Timer]
# Reset the system calendar config first
OnCalendar=
OnCalendar=*-*-* 21:00
RandomizedDelaySec=60m

これで、2 つの構成が表示され、カスタム構成がデフォルトの構成を上書きします。いいですね!

すべてが期待どおりに動作するかどうかの最終チェックは、次list-timersのコマンドで実行できますsystemctl

$ systemctl list-timers
NEXT                        LEFT          LAST                        PASSED       UNIT                         ACTIVATES                     
...
Thu 2020-08-06 21:51:36 UTC 12h left      Thu 2020-08-06 07:10:20 UTC 2h 20min ago apt-daily-upgrade.timer      apt-daily-upgrade.service               
...             

出力内の適切な行を見つけて列を確認しますNEXT。そこの値は、新しく構成された無人アップグレードの時刻を反映しているはずです。

答え3

公式Debianドキュメントhttps://wiki.debian.org/UnattendedUpgrades現在、多くの人を誤解させるような間違いがあります。これは、アップグレード時間を上書きするには、というファイルを作成する必要があると主張しています。

/etc/systemd/system/apt-daily-upgrade.d/override.conf

しかし正しい道は

/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf

答え4

apt-daily.timer1日に2回実行されるように設定されており、更新が必要なパッケージを更新してダウンロードするだけなので、本番環境を中断することはありません。apt-daily-upgrade.timer更新が実際にインストールされる時間なので、実稼働環境に影響する可能性が低い時間に設定してください。さらに、50unattended-upgrades で再起動が必要なものを再起動する設定があり、実際に更新が適用されるように設定することを検討する必要があります。これにはタイマーもあります。また、22.04 の時点で、アップグレード タイマーはデフォルトで午前 6 時 + 1 時間に変更されているため、ほとんどの場合、これを変更する必要はありません。

関連情報