![為什麼 cron 和 systemd 都會執行自動升級?](https://rvso.com/image/1157176/%E7%82%BA%E4%BB%80%E9%BA%BC%20cron%20%E5%92%8C%20systemd%20%E9%83%BD%E6%9C%83%E5%9F%B7%E8%A1%8C%E8%87%AA%E5%8B%95%E5%8D%87%E7%B4%9A%EF%BC%9F.png)
我試圖了解如何透過無人值守升級套件進行自動升級。以下描述的是我在全新安裝的 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
。它使用apt.systemd.daily
參數呼叫腳本update
,而 systemd 服務定義使用/lib/systemd/system/apt-daily-upgrade.service
參數呼叫相同的腳本install
。
據我了解,/usr/lib/apt/apt.systemd.daily
無人值守升級包使用的腳本進行自動升級。我想知道的是為什麼 cron 和 systemd 都執行它?
答案1
這兩個作業是互補的,其關係在 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 觸發運行無人值守更新。