Linux 定時任務(crontab)

pursuer.chen發表於2016-04-25

介紹

本篇主要介紹Linux定時任務命令crontab的用法,crontab是定時任務的命令,而crond則是定時任務的啟動服務。crontab的定時任務分為系統任務和使用者任務,其實二者沒有太大的區別。

 

 

安裝

在centos中crond預設是安裝好的,如果沒有安裝的話執行以下操作

 

安裝crond
yum -y install vixie-cron
yum -y install crontabs

加入開啟啟動服務
chkconfig crond on

啟動 

在Centos中crond服務預設是自動啟動的,如果沒有啟動可以手動啟動,具體方法如下。

檢視定時任務是否啟動
service crond status

將定時任務加入系統自動啟動服務
chkconfig crond on

啟動定時任務服務
service crond start

 

系統任務排程

系統定時任務一般用來執行一些系統方面的操作,比如日誌清理;系統的定時任務可以通過編輯/etc/crontab來設定。
  • SHELL:系統要使用哪個shell

  • PATH:系統定時任務執行的命令的路徑,不要把這個PATH和系統環境變數認為是一樣,二者沒有關係,在系統環境變數裡面配置的路徑在這裡不能生效。

  • MAILTO:用來接收郵件的使用者,預設是root,郵箱的內容會儲存在"/var/spool/mail/root"檔案中。

  • HOME:系統定時任務的家目錄。

 注意:系統定時任務在命令前必須指定使用者,一般系統定時任務會使用root使用者來執行,系統定時任務還可以配置定時任務的路徑,但是要使用“run-parts”,例如每個小時執行資料夾下面的定時任務,使用者定時任務不能指定資料夾。
00 * * * * root run-parts /etc/cron.hourly

 

使用者任務排程

使用者的定時任務可以通過執行crontab命令來建立,一個使用者只會生成一個定時任務檔案會以使用者名稱命名,使用者定義的定時任務都儲存在“/var/spool/cron”目錄下,使用者任務排程和系統任務排程的時間段是一樣的,唯一的區別就是使用者任務排程不需要指定使用者名稱,而且也不能使用run-parts引數指定目錄。
 

crontab命令選項

crontab [-u user] file

crontab [-u user] [ -e | -l | -r ]

  • -e:建立和編輯定時任務,預設是建立和編輯當前使用者的定時任務,只有root可以建立也編輯其它使用者的定時任務。

  • -l:列出當前使用者的定時任務,如果使用了-u引數指定了使用者那麼就是列出指定使用者的定時任務。

  • -r:刪除當前使用者的定時任務,如果使用了-u引數指定了使用者那麼就是刪除指定使用者的定時任務。

  • -i:在刪除使用者命令前加以提示,-i引數不能單獨使用需要結合-r引數以前使用。

 

兩種排程方式的不同點:

系統定時任務是整個系統級別的定時任務,只有root使用者可以建立,通過在/etc/crontab檔案或者是在/etc/cron.d/目錄中建立定時任務。

使用者定時任務是每個使用者都可以建立的定時任務,通過執行crontab -e進行建立,每個使用者的定時任務儲存在“/var/spool/cron”目錄下每個使用者自己的檔案中。也可以通過“crontab -l”檢視使用者自己的定時任務

兩種排程方式的相同點:

兩種定時任務的建立都是永久的,伺服器重啟後也不會失效;每次建立任務不需要重啟crond服務。

 

crontab任務格式

crontab分別有五個時間段,以空格隔開分別如下:
minute hour day month week command 順序:分 時 日 月 周

其中:

  • minute: 表示分鐘,可以是從0到59之間的任何整數。

  • hour:表示小時,可以是從0到23之間的任何整數。

  • day:表示日期,可以是從1到31之間的任何整數。

  • month:表示月份,可以是從1到12之間的任何整數。

  • week:表示星期幾,可以是從0到7之間的任何整數,這裡的0或7代表星期日。

  • command:要執行的命令,可以是系統命令,也可以是自己編寫的指令碼檔案。

在以上各個欄位中,還可以使用以下特殊字元:

  • 星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。

  • 逗號(,):可以用逗號隔開的值指定一個列表範圍,如:“1,2,5,7,8,9”,如果是month則表示這幾個月執行該命令。

  • 中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”

  • 正斜線(/):可以用正斜線指定時間的間隔頻率,例如“10-23/2”如果是指小時代表10點到23點每隔2個小時執行一次。例如*/1可以表示每隔一個小時執行一次。

其它限制:

/etc/cron.deny 該檔案中所列使用者不允許使用crontab命令

/etc/cron.allow 該檔案中所列使用者允許使用crontab命令 

/var/spool/cron/ 所有使用者crontab檔案存放的目錄,以使用者名稱命名

注意:預設的使用者的shell,path,mailto,home是沒有定義的,可以單獨定義使用者的這幾個變數否則可能會出現使用者找不到一些使用者軟體的命令,具體的定義方法可以參考系統任務的定義,主要還是SHELL、PATH。預設的使用者的這幾個變數資訊如下:

X-Cron-Env:<SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/chen>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=chen>
X-Cron-Env: <USER=chen>

 

例1:每天的1點到6點和13點到18點,每隔5分鐘執行命令

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin
MAILTO=chen
HOME=/data/backup
*/5 01-06,13-18 * * * ./userbackup.sh test

上面定義了每天的1點到6點和13點到18點,每隔5分鐘執行命令。

例2:每天9點到18點每隔2個小時執行一次

0 09-18/2 * * * ./userbackup.sh test

注意:時間範圍01-06是指01:00-06:59,命令後面可以使用“;”連線多個命令

總結

定時任務很實用,而且實用方法也很多,有興趣可以慢慢研究。

 

 

 

備註:

    作者:pursuer.chen

    部落格:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結。

《歡迎交流討論》

相關文章