Linux下學習crontab定時任務筆記

 

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 即可.

 

 

 

3./var/spool/cron/文件說明
  cron把命令行保存在/etc/crontab文件裏,這個文件通常在/etc目錄下,而每個系統用戶都可以有自己的crontab文件,在/var/spool/cron/目錄下.
查看當前用戶的cron配置
crontab -l

編輯當前用戶的cron配置
crontab -e

刪除當前用戶的cron配置
crontab -r

如當前是root身份,要查看/編輯/刪除某用戶的crontab,只需在相應的命令後加上-u USERNAME(如編輯某用戶的crontab:crontab -e -u USERNAME)即可.
cron 服務每分鐘不僅要讀一次/var/spool/cron目錄內的所有文件,還需要讀一次/etc/crontab文件,因此我們配置這個文件也能運用cron服務做一些事情.用crontab配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務.

 

例:用戶Sunrier定義自己的crontab定時任務,每分鐘在用戶目錄下的log.txt中寫入當前日期時間
[root@localhost ~]# su - Sunrier
[Sunrier@localhost ~]$ pwd
/home/Sunrier
[Sunrier@localhost ~]$ ls
[Sunrier@localhost ~]$ crontab -e
no crontab for Sunrier - using an empty one
crontab: installing new crontab
(注:輸入*/1 * * * * date >> /home/Sunrier/log.txt保存)
[Sunrier@localhost ~]$ crontab -l
no crontab for Sunrier
[Sunrier@localhost ~]$

切換到root用戶下重啓cron服務(cron服務也可以不需要重啓,即這一步可以省略)
[root@localhost ~]#
[root@localhost ~]# service crond restart
停止 crond:                                               [確定]
啓動 crond:                                               [確定]
[root@localhost ~]# cd /var/spool/cron
[root@localhost cron]# ls
Sunrier
[root@localhost cron]# cat Sunrier
*/1 * * * * date >> /home/Sunrier/log.txt
[root@localhost cron]#

切換到Sunrier用戶下查看
[root@localhost ~]# su - Sunrier
[Sunrier@localhost ~]$ pwd
/home/Sunrier
[Sunrier@localhost ~]$ ls
log.txt
[Sunrier@localhost ~]$ crontab -l
*/1 * * * * date >> /home/Sunrier/log.txt
[Sunrier@localhost ~]$ cat log.txt
Thu Aug  9 16:32:01 CST 2012
Thu Aug  9 16:33:01 CST 2012
Thu Aug  9 16:34:01 CST 2012
Thu Aug  9 16:35:01 CST 2012
Thu Aug  9 16:36:01 CST 2012
Thu Aug  9 16:37:01 CST 2012
Thu Aug  9 16:38:01 CST 2012
Thu Aug  9 16:39:02 CST 2012
Thu Aug  9 16:40:01 CST 2012
Thu Aug  9 16:41:01 CST 2012
Thu Aug  9 16:42:01 CST 2012
Thu Aug  9 16:43:01 CST 2012
Thu Aug  9 16:44:01 CST 2012
[Sunrier@localhost ~]$

 

 如果想刪除此用戶的定時任務:

(1).在當前Sunrier用戶環境下,則使用:crontab -r

(2).在root用戶環境下,則使用crontab -r -u Sunrier

 

4./etc/cron.deny 和 /etc/cron.allow 文件說明
/etc/cron.deny 表示不能使用crontab命令的用戶
/etc/cron.allow 表示能使用crontab的用戶

如果兩個文件同時存在,那麼/etc/cron.allow優先
如果兩個文件都不存在,那麼只有超級用戶可以安排作業

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章