Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103653258
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-04-29 14:55:51

 


名称 : crontab
使用权限 : 所有使用者
使用方式 :
crontab [ -u user ] file
crontab [ -u user ] { -l | -r | -e }
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
参数 :
crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
crontab -r : 删除目前的时程表

# 注意,若僅想要移除一項工作而已的話,必須要用 crontab -e 去編輯~
# 如果想要全部的工作都移除,才使用 crontab -r 喔!

crontab -l : 列出目前的时程表
crontab file [-u user]-用指定的文件替代目前的crontab。


crontab -e基本格:
*  *  *  *  *  command
分 时 日 月 周 命令

那麼那五個時間參數代表什麼呢?

代表意義 分鐘 小時 日期 月份
數字範圍 0-59 0-23 1-31 1-12 0-7

比較有趣的是那個『週』喔!當週為 0 或 7 時,都代表『星期天』的意思!第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~7(0跟7表示星期天)
第6列要运行的命令
另外, 還有一些輔助的字符,大概有底下這些:的字符,大概有底下這些:

特殊字符 代表意義
* 代表任何時刻都接受的意思!舉例來說,上表的範例一,那個日、月、週都是 * , 就代表著『不論何月、何日的禮拜幾的 12:00 都執行後續指令』的意思!
, 代表分隔時段的意思。舉例來說,如果要下達的工作是 3:00 與 6:00 時,就會是:
    0 3,6 * * * command
還是有五欄,不過第二欄是 3,6 ,代表 3 與 6 都適用!
- 代表一段時間範圍內,舉例來說, 8 點到 12 點之間的每小時的 20 分都進行一項工作:
    20 8-12 * * * command
仔細看到第二欄變成 8-12 喔!代表 8,9,10,11,12 都適用的意思!
/n 那個 n 代表數字,亦即是『每隔 n 單位間隔』的意思,例如每五分鐘進行一次,則:
    */5 * * * * command
很簡單吧!用 * 與 /5 來搭配,也可以寫成 0-59/5 ,相同意思!

我們就來搭配幾個例子練習看看吧!

crontab文件的一些例子:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。

* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache

进阶:
1:在 Linux 底下的 crontab 會自動的幫我們每分鐘重新讀取一次 /etc/crontab 的例行工作事項,但是某些原因或者是其他的 Unix 系統中,由於 crontab 是讀到記憶體當中的,所以在你修改完 /etc/crontab 之後,可能並不會馬上執行, 這個時候請重新啟動 crond 這個服務吧!

    /etc/init.d/crond restart

2:系統的設定: /etc/crontab
好了,我們就來看一下這個 /etc/crontab 的內容吧!

[root@linux ~]# cat /etc/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 <==每個月 1 號
分 時 日 月 週 執行者身份 指令串
看到這個檔案的內容你大概就瞭解了吧!呵呵,沒錯!這個檔案與將剛剛我們下達 crontab -e 的內容幾乎完全一模一樣!只是有幾個地方不太相同:
  • MAILTO=root
    這個項目是說,當 /etc/crontab 這個檔案中的例行性命令發生錯誤時,或者是該執行結果有 STDOUT/STDERR 時, 會將錯誤訊息或者是螢幕顯示的訊息傳給誰?預設當然是由系統直接寄發一封 mail 給 root 啦!不過, 由於 root 並無法在用戶端中以 POP3 之類的軟體收信,因此,我通常都將這個 e-mail 改成自己的帳號,好讓我隨時瞭解系統的狀況!例如: MAILTO=dmtsai@my.host.name
  • PATH=....
    還記得我們在 BASH Shell 當中一直提到的執行檔路徑問題吧!沒錯啦!這裡就是輸入執行檔的搜尋路徑! 使用預設的路徑設定就已經很足夠了!
  • 01 * * * * root run-parts /etc/cron.hourly
    在註解符號『 #run-parts 』這一行以後的命令,我們可以發現,五個數字後面接的是 root 喔!沒錯,與 crontab -e 的內容是不太一樣的!這個欄位的 root 代表的是『 執行的使用者身份為 root 』當然囉,你 也可以將這一行改寫成其他的身份哩!而 run-parts 代表後面接的 /etc/cron.hourly 是『 一個目錄內(/etc/cron.hourly)的所有可執行檔 』,這也就是說,每個小時的 01 分,系統會以 root 的身份去 /etc/cron.hourly/ 這個目錄下執行所有可以執行的檔案!後面的三行也都是類似的意思!你可以到 /etc/ 底下去看看,系統本來就預設了這四個目錄了!你可以將每天需要執行的命令直接寫到 /etc/cron.daily/ 即可,還不需要使用到 crontab -e 的程式呢!方便吧!
基本上, /etc/crontab 這個檔案裡面支援兩種下達指令的方式,一種是直接下達指令, 一種則是以目錄來規劃,例如:
  • 指令型態 没有run-parts
    01 * * * * dmtsai mail -s "testing" kiki < /home/dmtsai/test.txt
    以 dmtsai 這個使用者的身份,在每小時執行一次 mail 指令。
  • 目錄規劃
    */5 * * * * root run-parts /root/runcron
    建立一個 /root/runcron 的目錄,將要每隔五分鐘執行的『可執行檔』都寫到該目錄下, 就可以讓系統每五分鐘執行一次該目錄下的所有可執行檔。
這樣就可以曉得 run-parts 的用意了吧!此外,與 crontab -e 規劃當中最不相同的就是多了一個『使用者層級』的概念,通常我們都是以 root 的角度來規劃例行性命令,但是總有不需要 root 的指令吧!就可以使用這個層級來規範該程序的使用者屬於誰囉!


更详细的

阅读(334) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~