Raspberry Pi OS 上的 Cron 作業和任務排程

Jinku Hu 2023年1月30日 2022年5月18日
  1. Raspberry Pi OS 上的 Cron 作業和任務排程基礎知識
  2. 在 Raspberry Pi OS 上的 Crontab 配置檔案中新增計劃命令
  3. 在 Raspberry Pi OS 上使用 Cron 安排系統關閉
Raspberry Pi OS 上的 Cron 作業和任務排程

本文將介紹如何在 Raspberry Pi OS 上使用 cron 作業建立計劃任務。

Raspberry Pi OS 上的 Cron 作業和任務排程基礎知識

Raspberry Pi OS 提供了一個預裝的 cron 守護程式來執行預定的命令,就像大多數現代 Linux 發行版一樣。

守護程式是在作業系統啟動時建立的程式。它們主要執行直到系統關閉或明確的使用者發出訊號停止它們。

通常,在 Raspberry Pi OS 上預設執行幾個常見的守護程序。你通常可以使用程序名稱中的 d 字尾來識別它們,這在基於 Unix 的系統上是一種公認​​的約定。

cron 守護程式允許你在特定時間或間隔自動執行命令。由於作業系統管理涉及許多重複性任務,因此非常需要後一個功能。

cron 守護程序排程和執行的命令稱為 cron 作業。通常,cron 守護程式讀取配置檔案 crontab,其中包含使用特殊語法的計劃命令和相應時間。

由於 Raspberry Pi OS 是一個多使用者系統,cron 守護程序可以執行使用者特定的計劃任務,這些任務將儲存在相應的 crontab 檔案中。

在開始向 crontab 檔案新增命令之前,最好使用以下命令驗證系統是否執行 cron 守護程式。

sudo systemctl status cron.service

如果守護程序由於某種原因處於非活動狀態,你可以執行下一個命令來啟動它並使其處於安全狀態。

sudo systemctl start cron.service && sudo systemct enable cron.service

在 Raspberry Pi OS 上的 Crontab 配置檔案中新增計劃命令

單個使用者檔案儲存在 /var/spool/cron/crontabs 目錄中,其中配置檔案具有相應使用者的名稱。你可以使用該命令開始編輯你的 crontab。

crontab -e

此命令可能會要求你選擇一個命令列編輯器來編輯 crontab 檔案。你可以選擇你最喜歡的任何選項。

一旦開啟 crontab 檔案,它通常包括描述配置檔案細節的註釋掉的文字,甚至提供一個簡單的 cron 作業條目。在這種情況下,我們將在配置檔案中的註釋行之後開始編寫示例命令。

每個 cron 作業(任務)都在一行中定義,該行以五個時間日期欄位開頭,然後是命令,而每個欄位都由空格分隔。

時間-日期欄位指定何時執行給定命令並具有以下順序。

minute hour dom month dow command

每個時間-日期欄位可以有一個整數值、一個星號 (*) 字元、用於指定範圍的破折號分隔值或一個以逗號分隔的整數/範圍列表。

此外,範圍符號後面可以跟斜槓和整數,以更簡潔地編寫一系列數字。同時,下表顯示了每個時間-日期欄位的有效數字和相應的含義。

欄位 描述 範圍
分鐘 n-th 分鐘 of hour 0 - 59
小時 n-th 小時 of day 0 - 23
月的一天 1 - 31
月 of year 1 - 12
周的一天 0 - 6 (0 表示星期日)

在 Raspberry Pi OS 上使用 Cron 安排系統關閉

我們將在以下示例中演示多種時間日期格式以在 Raspberry Pi OS 上安排關機命令。下一個 cron 作業行將安排在每個工作日的凌晨 1:00 關閉系統。

 0 1 * * 0-6 sudo shutdown -h

請注意,如果你從非 root 帳戶新增 shutdown 命令,則需要 root 許可權。此外,crontab -e 命令需要使用 sudo 字首執行。

使用 crontab 命令新增 cron 作業後,它應該立即生效,因此你可以通過提前一兩分鐘安排命令來測試命令。

或者,你可以使用下一個命令在每月的奇數天凌晨 1:00 安排相同的 cron 作業。

 0 1 1-31/2 * * sudo shutdown -h

你可以在 Debian 手冊Arch Linux wiki 中找到有關使用 cron 作業的更高階場景的其他材料。

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - Raspberry Pi

相關文章 - Raspberry Pi OS