使用者指定的 crontab 是否有 systemd 替代方案?
我注意到在 Debian 相關係統上,系統級 crontab 腳本
/etc/cron.hourly
,/etc/cron.daily
… 正在逐漸退役,取而代之的是 systemd 計時器。例如:$ cat logrotate #!/bin/sh # skip in favour of systemd timer if [ -d /run/systemd/system ]; then exit 0 fi ...
我認為一個目標是逐步停用 cron 和 anacron。(見註1)
對我來說,cron 的一個關鍵案例是使用者定義的 crontabs (
crontab -e
),它允許使用者安排自己的作業以自己的使用者身份執行,而無需系統管理員權限。systemd,目前或計劃中是否有任何功能允許非管理員使用者安排重複性任務?
注1:
稍微弱化之前的聲明,除了那些說 cron 的壞話和對 systemd 計時器的讚美之外,我沒有發現任何特別好的討論。我沒有發現任何證據表明這個方向是由 Linux 發行版之神傳授的。但是我確實注意到它是一個旅行方向。因此,此聲明僅基於這樣的想法,即如果這是一個行進方向並且隨著時間的推移,我希望大多數/所有包最終都會以相同的方式進行,並使一個系統(cron)冗餘。
使用者可以設置systemd 計時器,基本上是通過在其中創建服務和計時器
~/.config/systemd/user
並啟用計時器。從使用者定義的 cron 作業切換到 systemd 計時器會失去兩個主要功能(好壞取決於具體情況):
- systemd 服務不會通過電子郵件發送結果;
- systemd 使用者計時器僅在使用者會話處於活動狀態時執行,除非使用者被配置為逗留(這是管理員需要做的事情)。
與 cron 作業相比,使用 systemd 計時器增加了許多可能性;例如,時間規範比 cron 的更具表現力,並且可以將計時器配置為根據附加要求觸發,例如“僅在特定 VPN 啟動時”。(當然,所有這些細節也可以寫在 cron 作業中……)我還發現 systemd 計時器比 cron 作業更易於管理:很容易看到計時器的狀態以及下一次將觸發的時間。
在 Debian 中,您看到的模式用於避免重複任務執行兩次,一次由 systemd 執行,另一次由 cron 或 anacron 執行(無論出於何種原因)。這並不意味著有停用 cron 或 anacron的一般目標。