什麼是 systemd 計時器?
systemd 計時器 是一種現代而強大的傳統 cron 工作替代品,用於排程並觸發 systemd 服務單元。與傳統 cron 系統相比,它憑藉更強的彈性、日誌記錄和相依性處理能力,簡化了 Linux 上的自動化。
為什麼要用 systemd 計時器而不是 Cron?
與 cron 相比,systemd 計時器有以下幾個優勢,使其成為 Linux 環境下工作自動化的首選:
- 統一管理:與其他 systemd 單元一起管理計時器(啟動、停止、啟用、停用)。
- 更完善的日誌記錄:使用
journalctl進行詳細的日誌記錄和狀態監控。 - 彈性的排程:同時支援以日曆為基礎的語法和單調(相對)計時器。
- 錯過事件的處理:重新啟動後自動補上錯過的事件。
快速範例:每天午夜執行指令碼
以下是建立 systemd 計時器的逐步指南,該計時器每天午夜執行一個指令碼:
1. 建立服務單元
服務單元定義要執行的動作——在這裡是執行一個指令碼。
建立檔案 /etc/systemd/system/daily-script.service:
[Unit]
Description=Run my daily script
[Service]
Type=oneshot
ExecStart=/usr/local/bin/myscript.sh
2. 建立計時器單元
計時器單元會排程服務應在何時執行。
建立檔案 /etc/systemd/system/daily-script.timer:
[Unit]
Description=Run my daily script every day at midnight
[Timer]
OnCalendar=*-*-* 00:00:00
# The format is: YYYY-MM-DD HH:MM:SS
# The above line schedules the task to run once per day at midnight.
Persistent=true
[Install]
WantedBy=timers.target
3. 啟用並啟動計時器
執行以下命令以重新載入 systemd、啟用計時器並立即啟動它:
sudo systemctl daemon-reload
sudo systemctl enable --now daily-script.timer
如何查看狀態和日誌
計時器設定好後,你可以使用以下命令監控其狀態和日誌:
- 查看使用中的計時器:
systemctl list-timers
- 查看計時器詳細資訊:
systemctl status daily-script.timer
- 查看指令碼執行的日誌:
journalctl -u daily-script.service
參考資料
- systemd 官方文件:
https://www.freedesktop.org/software/systemd/man/systemd.timer.html
這是 systemd 計時器的官方文件,詳細介紹了語法、選項和範例。 - Arch Wiki 上關於 systemd 計時器的文章:
https://wiki.archlinux.org/title/Systemd/Timers
一份由社群編寫的指南,包含實用範例和疑難排解技巧。 - Red Hat 關於 systemd 計時器的文件:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/chap-managing_services_with_systemd#sect-Managing_Timers
針對企業用途對 systemd 計時器的詳細解說。 - Ubuntu 社群求助 Wiki:
https://help.ubuntu.com/community/systemd
該頁面概述了 systemd,並包含有關計時器的資訊。
總結
systemd 計時器是 Linux 上工作自動化的穩健現代方案。與 cron 工作相比,它們提供更好的可靠性、可控性以及與 systemd 的整合。只需建立一個簡單的服務單元和計時器單元,你就可以自動執行備份、同步、清理工作等任務。無論你管理的是個人伺服器還是企業基礎架構,systemd 計時器都是高效 Linux 自動化的必備工具。