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.sh

2. 安排一個 cron 在每天早上 6 點和下午 6 點執行兩次

0 6,18 * * * /scripts/job.sh

3. 安排一個 cron 每分鐘執行一次

* * * * * /scripts/job.sh

4. 安排一個 cron 在每週一晚上 7 點執行。

 0 19 * * mon /scripts/job.sh

5. 安排一個 cron 每 15 分鐘執行一次。

 */10 * * * * /scripts/job.sh

6. 安排一個 cron 在選定的月份執行

* * * feb,jun,oct * /script/job.sh

7. 在 3 月 4 日上午 7:25 運行 shell 腳本/home/script/backup.sh

 25 7 4 3 * /home/script/backup.sh

8. 安排一個 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 執行的眾多任務之一。 如果您有興趣學習高級技能,請查看本課程。