資深Linux 系統管理員常用的15個很好用的Cron工作示例

摘要:Linux Cron 實用程序是一種在特定時間和/或日期持續調度例行後臺作業的有效方法。這篇文章講述了15 個很好用的 crontab 工作調度示例。

本文分享自華爲雲社區《Linux Crontab:15 個很好用的 Cron 工作示例》,作者:Tiamo_T。

經驗豐富的 Linux 系統管理員知道在後臺自動運行日常維護作業的重要性。

Linux Cron 實用程序是一種在特定時間和/或日期持續調度例行後臺作業的有效方法。

這篇文章講述了15 個很好用的 crontab 工作調度示例。

Linux Crontab 格式

MIN HOUR DOM MON DOW CMD

1. 爲特定時間安排作業

cron 的基本用法是在特定的時間執行一個作業,如下所示。這將在6 月 10 日上午 08:30執行完整備份 shell 腳本(完整備份)。

請注意,時間字段使用 24 小時格式。因此,對於上午 8 點使用 8,對於晚上 8 點使用 20。

30 08 10 06 * /home/ramesh/full-backup
  • 30 – 30 分鐘
  • 08 – 08 上午
  • 10 – 第 10 天
  • 06 – 第 6 個月(六月)
  • * – 一週中的每一天

2. 爲多個實例安排作業(例如,一天兩次)

以下腳本每天進行兩次增量備份。

本示例在每天的 11:00 和 16:00 執行指定的增量備份 shell 腳本(incremental-backup)。字段中的逗號分隔值指定該命令需要在所有提到的時間內執行。

00 11,16 * * * /home/ramesh/bin/incremental-backup
  • 00 – 第 0 分鐘(一小時的頂部)
  • 上午11,16 – 11 點和下午 4 點
  • * – 每天
  • * – 每個月
  • * – 一週中的每一天

3. 安排特定時間範圍的工作(例如僅在工作日)

如果您希望在特定時間範圍內每小時安排一次作業,請使用以下內容。

每天工作時間的 Cron Job

本示例在每天上午 9 點至下午 6 點的工作時間內(包括週末)檢查數據庫的狀態

00 09-18 * * * /home/ramesh/bin/check-db-status
  • 00 – 第 0 分鐘(一小時的頂部)
  • 09-18 – 9 am, 10 am, 11 am, 12 am, 1 pm, 2 pm, 3 pm, 4 pm, 5 pm, 6 pm
  • * – 每天
  • * – 每個月
  • * – 一週中的每一天

Cron Job 每個工作日的工作時間

本示例在每個工作日(即不包括週六和週日)的工作時間上午 9 點至下午 6 點檢查數據庫的狀態

00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
  • 00 – 第 0 分鐘(一小時的頂部)
  • 09-18 – 9 am, 10 am, 11 am, 12 am, 1 pm, 2 pm, 3 pm, 4 pm, 5 pm, 6 pm
  • * – 每天
  • * – 每個月
  • 1-5 -週一、週二、週三、週四和週五(每個工作日)

4. 如何查看 Crontab 條目?

查看當前登錄用戶的 Crontab 條目

要查看您的 crontab 條目,請從您的 unix 帳戶鍵入 crontab -l,如下所示。

ramesh@dev-db$ crontab -l
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space

[Note: This displays crontab of the current logged in user]

查看根 Crontab 條目

以 root 用戶 (su – root) 登錄並執行 crontab -l ,如下所示。

root@dev-db# crontab -l
no crontab for root

Crontab HowTo:查看其他 Linux 用戶的 Crontab 條目

要查看其他 Linux 用戶的 crontab 條目,請登錄到 root 並使用-u {username} -l,如下所示。

root@dev-db# crontab -u sathiya -l 
@monthly /home/sathiya/monthly-backup 
00 09-18 * * * /home/sathiya/check-db-status

5. 如何編輯 Crontab 條目?

編輯當前登錄用戶的 Crontab 條目

要編輯 crontab 條目,請使用 crontab -e,如下所示。默認情況下,這將編輯當前登錄的用戶 crontab。

ramesh@dev-db$ crontab -e
@yearly /home/ramesh/centos/bin/annual-maintenance
*/10 * * * * /home/ramesh/debian/bin/check-disk-space
~
"/tmp/crontab.XXXXyjWkHw" 2L, 83C

[Note: This will open the crontab file in Vim editor for editing.
Please note cron created a temporary /tmp/crontab.XX... ]

當你用 :wq 保存上述臨時文件時,它會保存 crontab 並顯示以下消息,表明 crontab 修改成功。

~
"crontab.XXXXyjWkHw" 2L, 83C written
crontab: installing new crontab

編輯根 Crontab 條目

以 root 用戶 (su – root) 登錄並執行 crontab -e,如下所示。

root@dev-db# crontab -e

編輯其他 Linux 用戶的 Crontab 文件條目

要編輯其他 Linux 用戶的 crontab 條目,請登錄到 root 並使用-u {username} -e,如下所示。

root@dev-db# crontab -u sathiya -e 
@monthly /home/sathiya/fedora/bin/monthly-backup 
00 09-18 * * * /home/sathiya/ubuntu/bin/check-db-status 
~ 
~ 
~ 
"/tmp/crontab.XXXXyjWkHw" 2L, 83C

6. 使用 Cron 每分鐘安排一個作業。

理想情況下,您可能不需要每分鐘安排一次作業。但是理解這個例子將幫助你理解本文下面提到的其他例子。

* * * * * CMD

* 表示所有可能的單位——即全年每小時的每一分鐘。除了直接使用這個 *,您會發現它在以下情況下非常有用。

  • 當您在分鐘字段中指定 */5 時,表示每 5 分鐘一次。
  • 當您在分鐘字段中指定 0-10/2 時,意味着在前 10 分鐘內每 2 分鐘一次。
  • 因此,上述約定可用於所有其他 4 個字段。

7. 每 10 分鐘安排一個後臺 Cron 作業。

如果您想每 10 分鐘檢查一次磁盤空間,請使用以下方法。

*/10 * * * * /home/ramesh/check-disk-space

它全年每 10 分鐘執行一次指定的命令 check-disk-space。但是您可能需要僅在辦公時間執行命令,反之亦然。上面的例子展示瞭如何做這些事情。

我們可以使用單個關鍵字來指定它,而不是在 5 個字段中指定值,如下所述。

在某些特殊情況下,您可以使用 @ 後跟關鍵字來代替上述 5 個字段,例如重新啓動、午夜、每年、每小時。

8. 使用@yearly 在每年的第一分鐘安排工作

如果您希望在每年的第一分鐘執行一項工作,那麼您可以使用@yearly cron 關鍵字,如下所示。

這將在每年 1 月 1 日的 00:00 使用年度維護 shell 腳本執行系統年度維護。

@yearly /home/ramesh/red-hat/bin/annual-maintenance

9. 使用@monthly 安排每個月開始的 Cron 作業

它與上面的@yearly 相似。但是使用@monthly cron 關鍵字每月執行一次命令。

這將在每月 1 日的 00:00 執行 shell 腳本磁帶備份。

@monthly /home/ramesh/suse/bin/tape-backup

10. 每天使用@daily 安排後臺作業

使用@daily cron 關鍵字,這將在每天 00:00 使用 cleanup-logs shell 腳本執行每日日誌文件清理。

@daily /home/ramesh/arch-linux/bin/cleanup-logs "day started"

11. 如何在每次重啓後使用@reboot 執行 Linux 命令?

使用@reboot cron 關鍵字,這將在機器每次啓動後執行一次指定的命令。

@reboot CMD

12. 如何使用 MAIL 關鍵字禁用/重定向 Crontab 郵件輸出?

默認情況下,crontab 將作業輸出發送給安排作業的用戶。如果要將輸出重定向到特定用戶,請在 crontab 中添加或更新 MAIL 變量,如下所示。

ramesh@dev-db$ crontab -l
MAIL="ramesh"

@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space

[Note: Crontab of the current logged in user with MAIL variable]

如果您不希望將郵件發送到任何地方,即停止通過電子郵件發送 crontab 輸出,請在 crontab 中添加或更新 MAIL 變量,如下所示。

MAIL=""

13. 如何使用 Crontab 每秒執行一次 Linux Cron 作業。

您不能安排每秒一次的 cronjob。因爲在 cron 中,您可以指定的最小單位是分鐘。在典型的場景中,我們大多數人沒有理由每秒在系統中運行任何作業。

14.在Crontab中指定PATH變量

以上所有例子我們都指定了需要執行的Linux命令或shell-script的絕對路徑。

例如,如果您只想指定tape-backup,而不是指定/home/ramesh/tape-backup,則將路徑/home/ramesh 添加到crontab 中的PATH 變量中,如下所示。

ramesh@dev-db$ crontab -l

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh

@yearly annual-maintenance
*/10 * * * * check-disk-space

[Note: Crontab of the current logged in user with PATH variable]

15. 從 Cron 文件安裝 Crontab

除了直接編輯 crontab 文件之外,您還可以先將所有條目添加到 cron 文件中。在文件中包含所有這些條目後,您可以將它們上傳或安裝到 cron,如下所示。

ramesh@dev-db$ crontab -l
no crontab for ramesh

$ cat cron-file.txt
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space

ramesh@dev-db$ crontab cron-file.txt

ramesh@dev-db$ crontab -l
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space

注意:這會將 cron-file.txt 安裝到您的 crontab,這也將刪除您的舊 cron 條目。因此,從 cron-file.txt 上傳 cron 條目時請注意。

 

點擊關注,第一時間瞭解華爲雲新鮮技術~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章