Linux :crontab 自動化的任務

版權聲明:本文爲博主原創文章,未經博主容許不得轉載。linux

目錄shell

  1. cron 簡介
  2. cron 命令
  3. Linux Crontab 格式
  4. cron 實例
    1. 特定時間執行
    2. 安排多個實例好比一天執行兩次
    3. 讓任務只在特定時間執行好比僅當工做日時執行
    4. 如何查看 cron 定時任務
    5. 如何編輯 cron 定時任務
    6. 安排每分鐘都執行定時任務
    7. 安排後臺每十分鐘執行定時任務
    8. 每年的第一分鐘執行定時任務yearly
    9. 每個月執行定時任務mothly
    10. 天天執行定時任務daily
    11. 每次重啓時執行定時任務reboot
    12. 如何用 mail 關鍵字禁止重定向 cron 的郵件
    13. 如何系秒每執行一個定時任務
    14. cron 中的 PATH 變量
    15. 從 cron 文件中定義 cron 任務

cron 簡介

cron 是 UNIX, SOLARIS,LINUX 下的一個十分有用的工具。經過 cron 腳本能使計劃任務按期地在系統後臺自動運行。數據庫

cron 命令

  • crontab -e – 編輯該用戶的 crontab,當指定 crontab 不存在時新建。
  • crontab -l – 列出該用戶的 crontab。
  • crontab -r – 刪除該用戶的 crontab。
  • crontab -u<用戶名稱> – 指定要設定 crontab 的用戶名稱。

Linux Crontab 格式

表格: Crontab 字段與容許的值 (Linux Crontab)工具

字段 描述 容許的值
分鐘 一小時的第幾分 0-59
小時 一天的第幾小時 0-23
日期 一個月的的第幾天 1-31
月份 一年的第幾個月 1-12
周幾 一週的第幾天 0-6
命令 命令 能夠被執行的任何命令

cron 實例

1. 特定時間執行

cron 的基本用法是在特定的時間執行一項任務,以下是 6 月 10 上午 8:30 執行 Full backup shell script。 要注意的是時間字段採用的是 24 小時制,若是是下午 8 點,則改寫爲 20 點ui

30 08 10 06 * /home/ramesh/full-backup
  • 30 – 第 30 分鐘
  • 08 – 早上 8 點
  • 10 – 10 號
  • 06 – 第 6 個月 (6 月)
  • * – 一週的任何一天

2. 安排多個實例(好比一天執行兩次)

下面的增量備份腳本天天執行兩次。url

天天於 11:00, 16:00 執行,逗號兩側的時間都會執行。spa

00 11,16 * * * /home/ramesh/bin/incremental-backup
  • 00 – 第 0 分鐘 (每小時開時)
  • 11,16 – 早上 11 點與下午 4 點
  • * – 天天
  • * – 每月
  • * – 一週的任何一天

3. 讓任務只在特定時間執行(好比僅當工做日時執行)

下面這個例子是天天 9:00-16:00 檢查數據庫狀態(包括週六).net

00 09-18 * * * /home/ramesh/bin/check-db-status
  • 00 – 第 0 分鐘 (每小時開時)
  • 09-18 – 9 點, 10 點, 11 點, 12 點, 下午 1 點, 下午 2 點, 下午 3 點, 下午 4 點, 下午 5 點, 下午 6 點
  • * – 天天
  • * – 每月
  • * – 一週的任何一天

若是隻想工做日執行此操做code

00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
  • 00 – 第 0 分鐘 (每小時開時)
  • 09-18 – 9 點, 10 點, 11 點, 12 點, 下午 1 點, 下午 2 點, 下午 3 點, 下午 4 點, 下午 5 點, 下午 6 點
  • * – 天天
  • * – 每月
  • 1-5 – 週一, 週二, 週三, 週四和週五 (工做日)

4. 如何查看 cron 定時任務

查看當前用戶定時任務crontab

ramesh@dev-db$ crontab -l

查看 ROOT 用戶定時任務,用 root 登入 su-root,再執行 crontab -l

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

查看其它用戶定時任務

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

5. 如何編輯 cron 定時任務

ramesh@dev-db$ crontab -e

6. 安排每分鐘都執行定時任務

理論狀況下,沒有每分鐘都要執行的 shell,但下面這個例子,讓咱們更好的瞭解 crontab

* * * * * 命令

* 表明着全部可能取到的值,除了直接用 * 外,下面的幾個例子也較爲經常使用

  • 當指定 */5 在分鐘字段,表明每五分鐘。
  • 當指定 0-10/2 在分鐘字段,表明在前十分鐘的每兩分鐘

上面的例子對於其它四個字段一樣試用

7. 安排後臺每十分鐘執行定時任務

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

有一些特殊的例子,能夠用關鍵字替代上述五個字段– rebootmidnightyearlyhourly

Table: Cron special keywords and its meaning

Keyword Equivalent
@yearly 0 0 1 1 *
@daily 0 0 * * *
@hourly 0 * * * *
@reboot 重啓時運行

8. 每年的第一分鐘執行定時任務(@yearly)

下面的例子將在每年的 1 月 1 日 0:00 執行

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

9. 每個月執行定時任務(@mothly)

下面的例子將在每個月 1 日 0:00 執行

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

10. 天天執行定時任務(@daily)

下面的例子將在天天 0:00 執行

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

11. 每次重啓時執行定時任務(@reboot)

@reboot CMD

12. 如何用 mail 關鍵字禁止/重定向 cron 的郵件

默認狀況下,crontab 將向佈置定時任務的管理員發送郵件,若是想重定向此用戶,添加並更新 MAIL

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

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

若是不想任何人接收,則直接將 MAIL 置空

13. 如何系秒每執行一個定時任務

沒法安排每秒執行,由於最小處理單元是分鐘,另外一方面,沒有什麼理由讓咱們每秒都執行一任務

14. cron 中的 PATH 變量

上面的例子都是用絕對的路徑

若是你想用相對的路徑,設置環境變量能夠在 crontab 增長

ramesh@dev-db$ crontab -l

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

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

15. 從 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任務

相關文章
相關標籤/搜索