systemd 計時器入門:Cron 工作的現代替代方案

什麼是 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

參考資料

  1. systemd 官方文件:
    https://www.freedesktop.org/software/systemd/man/systemd.timer.html
    這是 systemd 計時器的官方文件,詳細介紹了語法、選項和範例。
  2. Arch Wiki 上關於 systemd 計時器的文章:
    https://wiki.archlinux.org/title/Systemd/Timers
    一份由社群編寫的指南,包含實用範例和疑難排解技巧。
  3. 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 計時器的詳細解說。
  4. Ubuntu 社群求助 Wiki:
    https://help.ubuntu.com/community/systemd
    該頁面概述了 systemd,並包含有關計時器的資訊。

總結

systemd 計時器是 Linux 上工作自動化的穩健現代方案。與 cron 工作相比,它們提供更好的可靠性、可控性以及與 systemd 的整合。只需建立一個簡單的服務單元和計時器單元,你就可以自動執行備份、同步、清理工作等任務。無論你管理的是個人伺服器還是企業基礎架構,systemd 計時器都是高效 Linux 自動化的必備工具。

發表留言