Ubuntu 16.04:無人アップグレードがランダムに実行されます


13

セキュリティパッケージをインストールし、インストール時にメールで通知するように無人アップグレードを構成しました。

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

しかし、私が経験している遅延はそれよりもはるかに大きいです。午前9時、午後3時、午前12時に無人アップグレードが実行されるのを確認します。

無人アップグレードタスクはcron.dailyの最初のタスクです。つまり、実行時間が非常に長い以前のタスクはありません。

誰も同じようなことを経験しましたか?


ランダムな振る舞いは意図的です-何百万ものシステムが毎日同じ時間にいくつかのミラーを叩くのではなく、需要を平準化します。通常のデスクトップユーザーは、この動作にまったく気付かないはずです。一部のエンタープライズユーザーの方法では、動作をもう少し予測可能なものに変更することを希望しています。
-user535733

はい、この選択の背後にある理由は明らかです。この動作は、実稼働システムでは受け入れられないというだけです。この質問をしたとき、この動作(および修正)はどこにも文書化されていませんでした
ダニエルf

回答:


18

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

この問題の根本的な原因は、Ubuntu 16.04以降では、無人アップグレードがcronではなくsystemdを使用して、ランダム化された大きな遅延で更新をスケジュールすることにあります。

/lib/systemd/system/apt-daily.timer で構成されています

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

つまり、1日2回、6:00と18:00に実行され、最大12時間のランダムな遅延が発生します。これは実稼働環境では常に受け入れられるとは限らないため、これらの設定をオーバーライドする必要がありました。

パッケージ構成ファイルに手を加えないために、オーバーライドを定義しました/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


最初にOnCalendarをクリアするのはなぜですか?
jarno 16

1
それ以外の場合は、午前6時に新しいタイマーを追加するだけで、既存のタイマーも残します。無人アップグレードは6時にのみ実行するため、最初にスケジュールをクリアする必要があります。
ダニエルf。

「OnBootSec = 5min」を追加して、起動後の実行も有効にしましたが、機能しませんでした。(OnUnitActiveSec = 12hも追加され、あまり頻繁に実行されないようになりました。)
jarno

systemd、あるいはsystemdの考え方が再び攻撃されます。この宝石が私に噛み付いた後、本番環境でXenial Xerusへのアップグレードを再考する必要があるかもしれません。
ジョー

1
@ダニエルf。/ lib / systemd / system /にapt-daily.timerファイルがあり、/ etc / systemd / system / timers.target.wants /にもありますが、/ etc / systemd / system /にはありませんそれ自体があなたのような。代わりにapt-daily.timer.dディレクトリとoverride.confを/ lib / systemd / systemの下に作成する必要があるかどうかを知っていますか?すべてのアドバイスはthxに感謝します。
-Purvez

3

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

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

ただし、正しいパスは

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

1
素敵な発見。私見最も安全なことは使用することsudo systemctl edit apt-daily.timerです。これにより、正しいドロップインファイルでエディターが開きます。
PerlDuck

2
あなたPerlDuckをありがとう、私はあなたの提案とDebianのWikiページを編集した
ロルフWojtech

この回答は有用であり、Debian wikiページを更新したことを支持しました!
アンソニーゲゲガン

3

ダニエルのソリューションを試しましたが、アップグレードはまだ間違った時間に実行されました。必要な2つのシステム化されたオーバーライドがあることが判明しました。

ダウンロードに使用

/lib/systemd/system/apt-daily.timer-/etc/systemd/system/apt-daily.timer.d/override.confによるオーバーライド

アップグレードに使用

/lib/systemd/system/apt-daily-upgrade.timer-/etc/systemd/system/apt-daily-upgrade.timer.d/override.confで上書き


1
どのバージョンを使用していますか?したがって、上記の両方のタイマーを同時にオーバーライドする必要がありましたか?
ダニエルf。

Ubuntu 16.04.4 x64
Niels Rask
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.