![cron と systemd の両方が自動アップグレードを実行するのはなぜですか?](https://rvso.com/image/1157176/cron%20%E3%81%A8%20systemd%20%E3%81%AE%E4%B8%A1%E6%96%B9%E3%81%8C%E8%87%AA%E5%8B%95%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
unattended-upgrades パッケージを通じて自動アップグレードがどのように行われるかを理解しようとしています。以下は、Ubuntu 16.04.3 の新規インストールで発見した内容です。
/etc/cron.daily/apt-compat
exec /usr/lib/apt/apt.systemd.daily
最後にスクリプトを実行する行がありますapt.systemd.daily
。
systemd も実行され/usr/lib/apt/apt.systemd.daily
、タイマーを使用します。更新を実行する systemd サービス定義は にあります。 は引数で/lib/systemd/system/apt-daily.service
スクリプトを呼び出しますが、 の systemd サービス定義は引数で同じスクリプトを呼び出します。apt.systemd.daily
update
/lib/systemd/system/apt-daily-upgrade.service
install
私の理解では、/usr/lib/apt/apt.systemd.daily
unattended-upgrades パッケージによって使用されるスクリプトは自動アップグレードを実行するためのものです。知りたいのは、なぜ cron と systemd の両方がそれを実行するのかということです。
答え1
2 つのジョブは補完的であり、その関係は cron ジョブ (16.04 以降) に記述されています。
# Systemd systems use a systemd timer unit which is preferable to
# run. We want to randomize the apt update and unattended-upgrade
# runs as much as possible to avoid hitting the mirrors all at the
# same time. The systemd time is better at this than the fixed
# cron.daily time
Ubuntu 16.04 以降のシステムでは、systemd タイマーが重要な役割を担っています。このタイマーがすべての重労働をこなします。従来の cronjob は、何らかの理由で停止した場合に備えて、systemd タイマーをトリガーするだけです。
Ubuntu 14.04 およびそれ以前のシステム (Systemd 以外) では、システムの動作はまったく異なります。cronjob によって、無人更新の実行がトリガーされます。