Linux 黑話解釋:什麼是定時任務
在本期的《Linux 黑話解釋》系列文章中,你將了解到 Linux 中的 定時任務 功能。你將通過學習編輯 crontab
文件來創建定時任務。
何為定時任務
cron
是一個用於按計劃運行短小且快速的命令的實用命令行工具。該工具是一個方便、經典的系統管理工具,通過和其他工具結合使用可以自動運行各式各樣的任務。比如,有些人通過把 rsync
和 cron
結合使用,在特定的時間自動創建每日備份和每周備份。也有些人使用 cron
來分析伺服器日誌,並且結合郵件系統功能,在日誌檢測到錯誤時自動發送告警郵件。
cron
就如同「瑞士軍刀」一樣,可以多場景多樣化使用。儘可能發揮你的想像,去挖掘它的功能。
其實 cron
的使用很容易上手,只需要幾秒鐘。不過在我們開始上手之前,先來討論下幾個經常容易混淆的概念。
cron、定時任務、crontab
有三個術語比較容易混淆:cron
、定時任務和 crontab
,讓我們來看看它們的含義:
術語 | 含義 |
---|---|
cron |
這是安裝在系統上的實際執行定時任務的 守護進程。 |
定時任務 | 「任務」是指一段啟動並運行的程序。cron 可以按照約定的時間計劃運行各種任務,這樣的任務通常叫做「定時任務」。 |
crontab | 這是一個文件,用於定義定時任務。一個 crontab 文件可以通過表格形式(每一行就是一個定時任務)定義多個定時任務。 |
來看一個簡單例子:創建一個定時任務,每小時向 crontabl_log.txt
文件列印 Linux is cool!
。
0 * * * * echo "Linux is Cool!" >> ~/crontab_log.txt
是不是這麼個簡單定時任務的例子都讓你感到驚恐,這是因為你需要懂得如何去讀懂一個定時任務的屬性。
我將在後文中講述這個基礎理論知識。
上手 cron
我們通過另一個例子來看看 cron
如何工作。
為了創建定時任務(或者說 cron
將要執行的命令任務),你只需要運行:
crontab -e
這將會打開一個文件,用於編輯定時任務:
其中,所有以 #
開頭的行都是注釋,用於指導你如何使用 cron
,如果覺得沒用可以刪除它們。
我們將創建如下任務,作為我們的第一個定時任務:
* * * * * touch ~/crontab_test
讓我快速看看該任務將會做什麼:
定時任務都是以 「分鐘 小時 天 月 周 命令」 形式呈現:
- 分鐘:指該任務在哪一分鐘會被執行。所以,該值為
0
則代表在每個小時開始時運行,5
則代表在每個小時的第 5 分鐘會運行。 - 小時:指該任務在一天中的哪個小時會被執行,取值範圍為
0-23
。沒有24
的原因是23
時的末尾是半夜11:59
,然後就是每天的開始0
時。分鐘的取值範圍定義邏輯與之類似。 - 天:指一個月中的哪一天執行該任務,取值範圍是
1-31
(不同於前面的分鐘和小時從0
開始取值)。 - 月:指該任務在哪個月被執行,取值範圍是
1-12
。 - 周:指該任務在星期幾被執行,從周日開始算起,取值範圍是
0-6
(分別對應周日、周一到周六)。 - 命令:是你想要運行的命令任務。
如果想對 「分鐘 小時 天 月 周」 部分有更詳細的理解,可以參考 Crontab guru 網站,該網站可以幫助你理解正在執行什麼。
接著之前的例子 * * * * * touch ~/crontab_test
,表示每分鐘創建一次 ~/crontab_test
文件。
讓我們將該任務編輯進 crontab
然後看看執行結果:
等到下一分鐘,你就會發現你的家目錄下多了文件 crontab_test
:
這便是 cron
的基礎應用示例。
一個實用的定時任務示例
假設你想創建一個腳本,用於拷貝多個目錄內容到一個路徑並打包作為備份,該如何實現?
通過 cron
定時任務就可以很容易實現該功能。
請看如下腳本:
#!/usr/bin/bash
echo "Backing up..."
mkdir -p ~/.local/tmp/
tar -Pc ~/Documents/ -f ~/.local/tmp/backup.gz
該腳本做了如下事情:
- 確保備份路徑目錄
~/.local/tmp/
存在。 - 將目錄
~/Documents/
下的所有內容打包至文件~/.local/tmp/backup.gz
。
我們先來手動運行該腳本,看看它到底如何工作。
首先,我們在家目錄(~
)下創建該腳本,命令為 backup_script
,如下圖所示:
然後編輯 backup_script
腳本,寫入上面那個腳本代碼。
接著,賦予 backup_script
可執行許可權:
最後運行腳本 ~/backup_script
,進行功能驗證:
你可以通過運行命令 tar -xf ~/.local/tmp/backup.gz -C <output_dir>
來進行備份恢復,這裡 <output_dir>
是指文件要恢復到的路徑目錄。
接下來,就可以用 cron
工具來進行定時任務運行該腳本了。
舉個例子,假設需要每天的凌晨 3 點運行該備份腳本,你可以在 crontab
中輸入如下命令:
* 3 * * * ~/backup_script
這樣你就可以每天自動進行備份操作了。
後記
本文簡單介紹了定時任務功能。儘管我不確定 Linux 桌面用戶使用該功能多不多,但我知道定時任務功能被許多系統管理員廣泛應用。如果你有什麼想法,歡迎在評論區留言。
via: https://itsfoss.com/cron-job/
作者:Hunter Wittenborn 選題:lujun9972 譯者:jrglinux 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive