Linux 定時任務(crontab)


介紹

本篇主要介紹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

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

《歡迎交流討論》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM