歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下學習crontab定時任務筆記

Linux下學習crontab定時任務筆記

日期:2017/2/28 15:43:27   编辑:Linux教程

crontab介紹
crontab命令的功能是在一定的時間間隔調度一些命令的執行.當安裝完操作系統之後,默認便會啟動此任務調度命令.crontab命令每分鐘會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作.

1. /etc/crontab文件說明
在/etc目錄下有一個crontab文件,這裡存放有系統運行的一些調度程序;每個用戶可以建立自己的crontab調度,這些文件在/var/spool/cron目錄下.

如:(切換到root用戶下)
[root@localhost ~]# cd /etc
[root@localhost etc]# cat crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
[root@localhost etc]#

說明:
前四行是用來設置crontab任務運行環境的變量.SHELL變量的值告訴系統要使用哪個Shell環境(注:這裡是bash shell);
PATH變量定義用來執行命令的路徑;crontab任務的輸出被發送給 MAILTO 變量定義的用戶名.如果 MAILTO 變量被定義為空字符串(MAILTO=""),電子郵件就不會被寄出;HOME變量可以用來設置在執行命令或腳本時使用的主目錄.
"run-parts"如果去掉這個參數的話,後面就要寫運行的某個腳本名,而不是文件夾名(即目錄)了.

/etc/crontab文件中的每一行都代表一項任務,它的格式為:
minute hour day month day_of_week [username] command

minute ------ 分鐘,取值從0到59之間的任何整數
hour ------ 小時,取值從0到23之間的任何整數
day ------ 日期,取值從1到31之間的任何整數(如果指定了月份,必須是該月份的有效日期)
month ------ 月份,取值從1到12之間的任何整數(或使用月份的英文簡寫如jan,feb等等)
day_of_week ------ 星期,取值從0到7之間的任何整數,這裡的0或7代表星期日(或使用星期的英文簡寫如sun,mon等等)
[username] ------ 用戶名,執行命令時以此用戶身份
command ------ 要執行的命令(命令可以是pwd >>/tmp/log 之類的終端命令,也可以是執行你自己定義的Shell腳本命令等)

在以上的任何值中,星號(*)可以用來代表所有有效的值,例如:月份值中的星號(*)意味著在滿足其它制約條件後每月都執行該命令.
整數間的短線(-)指定一個整數范圍,例如:1-5意味著整數1,2,3,4,5.
用逗號(,)隔開的一系列值指定一個列表,例如:2,3,5,8,9表明這5個指定的整數.
正斜線(/)可以用來指定間隔頻率,在范圍後加上/意味著在范圍內可以跳過integer,例如:0-59/2可以用來在分鐘字段定義每兩分鐘.
間隔頻率值還可以和星號一起使用,例如:*/3的值可以用在月份字段中表示每三個月運行一次任務.
開頭為井號(#)的行是注釋,不會被處理.

如你在/etc/crontab文件中所見,它使用run-parts腳本來運行/etc/cron.hourly,/etc/cron.daily,/etc/cron.weekly和/etc/cron.monthly
目錄中的腳本,這些腳本被相應地每小時,每日,每周,和每月執行,這些目錄中的文件應該為shell腳本.

如果某cron任務需要根據調度來執行,而不是每小時,每日,每周,或每月執行,它可以被添加到/etc/cron.d目錄中.該目錄中的所有文件使用和/etc/crontab中一樣的語法.在寫crontab執行的Shell腳本時,注意要添加權限和路徑,否則導致無法執行該Shell腳本.

例1:
18 1 * * * root tar cf /home/Sunrier/bak/bak.tar /home/Sunrier/log >> /dev/null 2>&1
上面這句將在每天的凌晨1點18分(01:18)運行tar備份命令

例2:
28 13 6 9 1 root tar cf /home/Sunrier/bak/bak.tar /home/Sunrier/log >> /dev/null 2>&1
上面這句將在9月6日每周一的13:28運行tar備份命令

2.cron服務的相關命令
(1)啟動:
/sbin/service crond start

(2)停止:
/sbin/service crond stop

(3)重啟:
/sbin/service crond restart

(4)重新加載配置:
/sbin/service crond reload

(5)查看服務狀態:
/sbin/service crond status

注:一般系統/sbin路徑設置成了默認的可執行路徑,故前面的/sbin可以省略.可以用echo $PATH看下當前系統默認的可執行命令查找路徑.

cron設置為開機時自動啟動:在/etc/rc.d/rc.local腳本裡加入/sbin/service crond start 即可.

Copyright © Linux教程網 All Rights Reserved