Linux 中的 Crontab – 帶有實時示例和工具
已發表: 2015-07-26讓我們探索一下 crontab、它的命令以及與 Crontab 相關的各種操作。
我們將學習如何使用 cron 實用程序安排任務,最後,我們還將討論一些幫助我們格式化和測試 cron 命令的在線工具。
起源
crontab 代表“ cron 表”。 cron 這個詞取自希臘詞Chronos ,意思是時間。 Crontab 是一個系統守護進程,它會按照預定的時間自動執行一些任務和作業。
用例
Crontab 可用於執行各種操作,例如處理自動備份、輪換日誌文件、在遠程機器之間同步文件以及清除臨時文件夾等。Crontab 可用於任何類型的工作,但當我們開始處理系統管理類工作。
使用 cron,管理員可以安排作業在特定時間和日期運行。
那麼讓我們看看如何設置它。
crontab 語法
要執行命令列表,cron 實用程序會讀取配置文件。 為了解釋crontab配置表中的行,它遵循 Crontab 語法。 Crontab 有六個字段,前五(1-5)個字段定義了執行的日期和時間。 最後一個字段,即第 6 個字段,可以是要執行的用戶名和/或任務/job/command/script。
* * * * * USER_NAME 命令/腳本執行
│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________星期幾(0 - 6)(0 是星期日,或使用名稱)
│ │ │ | ____________月 (1 – 12),* 表示每個月
│ │ | ______________月份中的某一天 (1 – 31),* 表示每一天
│ | ________________小時 (0 – 23),* 表示每小時
| ___________________分鐘 (0 – 59),* 表示每分鐘
備註:
- 星號 (*) 用於匹配字段的所有可能值。 例如,小時字段中使用的星號相當於每小時,或者月份字段中的星號相當於每個月。
- 用戶名是可選的(僅當它是系統 crontab 文件時才可用)
例子:
讓我們通過一些例子來理解上面的語法
1. 安排一個 cron 在每天早上 5 點執行
0 5 * * * /scripts/job.sh2. 安排一個 cron 在每天早上 6 點和下午 6 點執行兩次
0 6,18 * * * /scripts/job.sh3. 安排一個 cron 每分鐘執行一次
* * * * * /scripts/job.sh4. 安排一個 cron 在每週一晚上 7 點執行。
0 19 * * mon /scripts/job.sh5. 安排一個 cron 每 15 分鐘執行一次。
*/10 * * * * /scripts/job.sh6. 安排一個 cron 在選定的月份執行
* * * feb,jun,oct * /script/job.sh 7. 在 3 月 4 日上午 7:25 運行 shell 腳本/home/script/backup.sh
25 7 4 3 * /home/script/backup.sh8. 安排一個 cron 每 30 秒執行一次
由於我們無法控制 Crontab 中的秒數,但我們可以通過以下兩步過程來實現。
- 讓我們首先安排一個每分鐘運行的任務。
* * * * * /home/scripts/script.sh- 現在讓我們使用
sleep命令暫停執行 30 秒。
* * * * * sleep 30; /home/scripts/script.sh上述任務將停止執行 30 秒,然後再次恢復。
Cron 配置文件的類型
有兩種類型的 Cron 配置文件:
UNIX/Linux 系統 Crontab
這需要 root 權限,因為它通常用於系統服務和關鍵作業。 第六個字段(在上述語法描述中)是運行命令的用戶名。 它使系統 crontab 能夠以任何用戶身份運行命令。
用戶 crontab
用戶還可以使用 crontab 命令安裝自己的 cron 作業。 同樣,第六個字段(在上述語法描述中)是要運行的命令,所有命令都以創建 crontab 的用戶身份運行。 每個用戶都可以有自己的 crontab 文件,雖然這些是/var/spool/cron/ crontabs 中的文件,但不能直接編輯它們。 我們需要使用 crontab 命令來編輯或設置我們自己的 cron 作業。
它是如何工作的?
cron 服務(守護進程)在後台運行並不斷檢查(每分鐘) /etc/crontab文件和/etc/cron.*/目錄。 它還檢查/var/spool/cron/目錄。 當分鐘、小時和月份字段與當前時間匹配時,命令由cron執行,並且至少有一個兩天字段(月份中的某天,或星期幾)與當前日期匹配。
基本命令
列出現有的 Cron 作業
我們可以使用以下命令列出所有 Cron 作業,而無需打開 crontab 配置文件
crontab -l如果沒有現有作業,它將返回輸出為
[geekflare@localhost ~]# crontab -l no crontab for geekflare [geekflare@localhost ~]#如果用戶已經添加了一些作業,它將顯示如下。
[geekflare@localhost ~]# crontab -l # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 am every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # mh dom mon dow command 0 */1 * * * /home/account/scripts/updateAccountStatuses.sh 0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh [geekflare@localhost ~]#cron 表是特定於用戶的,這意味著您必須使用特定用戶登錄才能查看 cron 表列表。
列出特定用戶的 Cron
要列出另一個用戶的計劃作業,請使用-u ( User ) 和-l ( List ) 選項。
crontab -u another_username -l
示例: crontab -u geekflare -l
添加/修改 Crontab 條目
要編輯 crontab 條目,我們可以使用-e選項,如下所示。

crontab -e
上述命令將打開 vi 編輯器,您可以在其中指定作業的詳細信息並保存文件。 保存後,您可以使用crontab -l驗證是否配置了 cron。
為特定用戶添加/修改 Crontab 條目
我們可以使用以下命令為另一個用戶編輯 crontab
crontab -u another_username -e 示例: crontab -u geekflare -e
刪除 crontab 條目
將<strong>-r</strong>參數與 Crontab 一起使用以刪除完整的計劃作業,而無需從 crontab 確認
crontab -r
如果您想在刪除計劃作業之前進行確認,請使用帶有-r的<strong>-i</strong>選項,這將在刪除用戶的 crontab 之前提示用戶確認。
crontab -i -r [geekflare@localhost ~]# crontab -i -r crontab: really delete geekflare's crontab?crontab 特殊字符串
除了我們討論的上述語法之外,我們還可以使用 Crontab 提供的八個特殊字符串。 它不僅可以節省我們的時間,還可以提高可讀性。
| 特殊字符串 | 描述 |
@reboot | 運行一次,啟動後。 |
@yearly | 每年運行一次,即0 0 1 1 * |
@annually | 與@yearly相同 |
@monthly | 每月運行一次,即0 0 1 * * |
@weekly | 每週運行一次,即0 0 * * 0 |
@daily | 每天運行一次,即0 0 * * * |
@midnight | 與@daily相同 |
@hourly | 每小時運行一次,即0 * * * * |
Crontab 特殊字符串示例
1. crontab 每年安排任務
@yearly /scripts/greeting.sh
我們可以執行上面的一個來發送新年祝福,它將在每年的第一分鐘執行。
2. Crontab 安排任務按月執行。
@monthly /scripts/cleanup.sh
我們可以在每個月初執行上述的一些清理活動。
同樣,我們可以將其他 Crontab 特殊字符串用於每週、每天和每小時的目的。
cron 目錄
系統管理員可以使用預定義 cron 目錄下的系統範圍的 cron 計劃,如下所示
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.monthly
- /etc/cron.weekly
Crontab 實時示例
讓我們討論一些系統管理員或 IT 專業人員通常使用的實時示例。
刪除空文件和目錄
45 0 * * * geekflare find /tmp -type f -empty -delete
上面的 cron 表達式將從/tmp目錄中找到空文件和目錄,並將其刪除。 該作業將在每天上午 12.45運行。 我們需要提及用戶名來執行這項工作。 在上面的示例中, geekflare用戶正在執行 cron 作業操作。
使用單個 cron 執行多個任務
* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh
多個任務/作業可以使用分號 ( ; ) 分隔,並且可以分配給單個 cron 表達式。
Cron 格式化和測試工具
到目前為止,我們討論了 crontab 的命令和語法來安排任務。 但是,如果您不是系統管理員,並且您的工作不是定期設置 Cron,那麼您可能無法記住語法,並且會為錯誤留出空間。 別擔心,我們有辦法解決這個問題。
網上有幾種 Cron 格式化工具。
# 1. Cron 作業生成器
Cron Job Generator 是一個非常用戶友好的 GUI,您可以在其中指定腳本的分鐘、天和路徑來生成 crontab。
讓我們舉一個實時示例,我必須在周一到週五之間每 5 分鐘執行一次/home/processMonitor.sh 。

所以,我得到了下面的 Cron 語法,我可以通過執行將其放入我的 crontab
crontab –e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh
# 2. Easycron
Easycron 是一個有用的基於 Web 的 cron 作業調度程序。 我們可以通過指定要調用的 URL創建一個 cron 作業,我們可以設置它應該執行的時間。 我們還可以指定一個 cron 表達式或從描述形式手動添加它。 重要的是,我們可以選擇使用基本 HTTP 身份驗證來實現一小層安全性。

不僅如此,Easycron 還可以用來實現標準 Cron 表達式、Cron Job Execution Logs、Email Notification、Separate Failure Logs 等其他用途。
# 3. crontab 生成器
Crontab Generator 是另一個生成 crontab 的便捷工具,使用此工具,您還可以添加是否要將 cron 輸出保存到文件或發送到電子郵件。

# 4. Crontab 大師
Crontab Guru 是一個簡單的在線 cron 計劃表達式編輯器。 此外,它還提供了一種有用的方法來監視您的 cronjob。 我們需要做的就是複制提供的命令並附加到 crontab 定義的末尾。 如果 cron 作業失敗或什至沒有啟動,您將收到一封警報電子郵件。
在下面的示例中,作業將在每天、每月和每週的04:05執行。

# 5. CRON 測試儀
CRON Tester 允許我們測試 cron 時間/日期定義。 在某些情況下,我們必須解碼現有的 cron 語法以進行故障排除或只想進行測試。
為此,我們可以使用此工具。 我們需要做的就是將我們的 cron 表達式複制並粘貼到 cron 定義字段中,然後選擇迭代次數並單擊“測試”以查看它將運行的各個日期。
讓我們檢查一下我們的 cron 表達式之一4 3 */2 * * ,它應該每兩天在03:04(AM)運行一次。 讓我們用 cron tester 來驗證一下。

結論
我希望以上內容可以幫助您更好地了解 Crontab 並設置 cron 作業。 通過 Cron 調度作業是 Linux Admin 執行的眾多任務之一。 如果您有興趣學習高級技能,請查看本課程。
