Linux命令(003) -- crontab

1、準備知識

Linux下的任務調度分爲兩類:系統任務調度和用戶任務調度。shell

(1)、系統任務調度緩存

系統任務調度是系統週期性所要執行的工做,好比寫緩存數據到硬盤、日誌清理等。在/etc目錄下有一個crontab文件,它是系統任務調度的配置文件。bash

# vi /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

前四行是用來配置crond任務運行的環境變量,第一行SHELL變量指定了系統要使用哪一個shell,這裏是bash,第二行PATH變量指定了系統執行命令的路徑,第三行MAILTO變量指定了crond的任務執行信息將經過電子郵件發送給root用戶,若是MAILTO變量的值爲空,則表示不發送任務執行信息給用戶,第四行的HOME變量指定了在執行命令或者腳本時使用的主目錄。工具

(2)、用戶任務調度rest

用戶任務調度是指用戶按期要執行的工做,好比用戶數據備份等。用戶可使用crontab工具來定製本身的計劃任務。全部用戶定義的crontab文件都被保存在/var/spool/cron目錄中。日誌

/etc/cron.deny   該文件中所列用戶不容許使用crontab命令
/etc/cron.allow  該文件中所列用戶容許使用crontab命令 
/var/spool/cron/ 全部用戶crontab文件存放的目錄,以用戶名命名

2、crontab命令

crontab命令被用於維護相關用戶的crontab文件。看一下man page是如何描述crontab命令的:「crontab是一個程序,它被用於裝載、移除、顯示crontab守護進程的任務表。」blog

#語法
crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]

#選項
-u<用戶名稱>:指定要設定定時任務的用戶名稱。
-l:列出該用戶的定時任務。
-e:編輯該用戶的定時任務。 
-r:刪除該用戶的定時任務。 

3、crontab文件

用戶所創建的crontab文件中,每一行都表明一項任務,每行的每一個字段表明一項設置,它的格式共分爲六個字段,前五段是時間設定段,第六段是要執行的命令段,格式以下:進程

minute hour day month week command 
# 分 時 日 月 周 命令

其中: crontab

  • minute:表示分鐘,能夠是從0到59之間的任何整數。
  • hour:表示小時,能夠是從0到23之間的任何整數。
  • day:表示日期,能夠是從1到31之間的任何整數。
  • month:表示月份,能夠是從1到12之間的任何整數。
  • week:表示星期幾,能夠是從0到7之間的任何整數,這裏的0或7表明星期日。
  • command:要執行的命令,能夠是系統命令,也能夠是本身編寫的腳本文件。

在以上各個字段中,還可使用如下特殊字符it

  • 星號(*):表明全部可能的值,例如month字段若是是星號,則表示在知足其它字段的制約條件後每個月都執行該命令操做。
  • 逗號(,):能夠用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」
  • 中槓(-):能夠用整數之間的中槓表示一個整數範圍,例如「2-6」表示「2,3,4,5,6」
  • 正斜線(/):能夠用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線能夠和星號一塊兒使用,例如*/10,若是用在minute字段,表示每十分鐘執行一次。

4、crontab服務

/sbin/service crond start    //啓動服務 
/sbin/service crond stop     //關閉服務 
/sbin/service crond restart  //重啓服務 
/sbin/service crond reload   //從新載入配置 

5、示例

# 每1分鐘執行一次
* * * * *

# 每小時的第3和第15分鐘執行 
3,15 * * * *

# 在上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * *
 
# 每隔兩天的上午8點到11點的第3和第15分鐘執行
3,15 8-11 */2 * *

# 每一個星期一的上午8點到11點的第3和第15分鐘執行 
3,15 8-11 * * 1

# 每晚的21:30執行命令
30 21 * * *

# 每個月一、十、22日的4:45
45 4 1,10,22 * *

# 每週6、週日的1:10
10 1 * * 6,0 

# 天天18:00至23:00之間每隔30分鐘
0,30 18-23 * * * 

# 每星期六的晚上11:00
0 23 * * 6  

# 每一小時
* */1 * * * 

# 晚上11點到早上7點之間,每隔一小時
* 23-7/1 * * * 

# 每個月的4號與每週一到週三的11點
0 11 4 * mon-wed 

# 一月一號的4點
0 4 1 jan * 
相關文章
相關標籤/搜索