今天在寫crontab發現,有些腦袋轉不過來,不過透過鳥哥網站的講解,及網路上找到的分享,終於有種恍然大悟的感覺。
crontab的常用例子 :
#每天早上7点执行一次 /bin/ls :
0 7 * * * /bin/ls
#每天早上6点10分
10 6 * * * date
#每两个小时
0 */2 * * * date
#晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * * date
#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * mon-wed date
#1月份日早上4点
0 4 1 jan * date
linux系统的WEB服务器管理员经常用到crontab的例子 :
#在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
#每晚的21:30重启apache。
30 21 * * * /etc/init.d/apache2 restart
#每月1、10、22日的4 : 45重启apache
45 4 1,10,22 * * /etc/init.d/apache2 restart
#每周六、周日的1 : 10重启apache。
10 1 * * 6,0 /etc/init.d/apache2 restart
#在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0,30 18-23 * * * /etc/init.d/apache2 restart
#每星期六的11 : 00 pm重启apache。
0 23 * * 6 /etc/init.d/apache2 restart
#每一小时重启apache
* */1 * * * /etc/init.d/apache2 restart
#晚上11点到早上7点之间,每隔一小时重启apache
* 23-7/1 * * * /etc/init.d/apache2 restart
#每月的4号与每周一到周三的11点重启apache
0 11 4 * mon-wed /etc/init.d/apache2 restart
#1月1日的4点重启apache
0 4 1 jan * /etc/init.d/apache2 restart
================以下是鳥哥網站資訊============
[root@test /root]# vi /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 <==每個月執行的工作
分 時 日 月 週 使用者 參數 指令
數字代表的意義 |
分鐘 |
小時 |
日期 |
月份 |
週 |
範圍 |
0-59 |
0-23 |
1-31 |
1-12 |
0-6 (0為星期天) |
另外,如果是『 * 』的時候,代表所有數字都適用的意思。所以,你就可以知道我上面那一行寫的意義為何了!那就是『不論何月、何日、星期幾的 12 點 0 分時,執行 mail test < /home/test/test.txt 這個命令』!還不瞭解?沒關係,我們這裡作幾個例子!
- MAILTO=root:是說,當 /etc/crontab 這個檔案中的例行性命令發生錯誤時,會將錯誤訊息或者是螢幕顯示的訊息傳給誰?由於 root 並無法在用戶端中收信,因此,我通常都將這個 e-mail 改成自己的帳號,好讓我隨時瞭解系統的狀況!
- 01 * * * * root run-parts /etc/cron.hourly:在註解符號 #run-parts 這一行以後的命令,我們可以發現,五個數字後面接的是 root 喔!沒錯,這一行代表的是『執行的層級為 root 身份』當然囉,你也可以將這一行改寫成其他的身份哩!而 run-parts 代表後面接的 /etc/cron.hourly 是『一個目錄內(/etc/cron.hourly)的所有可執行檔』,這也就是說,每個小時的 01 分,系統會以 root 層級的使用者去 /etc/cron.hourly 這個目錄下執行所有可以執行的檔案!後面的三行也都是類似的意思!你可以到 /etc/ 底下去看看,系統本來就預設了這四個目錄了!你可以將每天需要執行的命令直接寫到 /etc/cron.daily 即可,還不需要使用到 crontab -e 的程式呢!方便吧!
注意:基本上 /etc/crontab 裡頭支援兩種下達指令的方式,一種是直接以 指令型態 下達,一種則是以『目錄規劃』來下達;
01 * * * * test mail -s test test < /home/test/test.txt
使用者是 test, 且在每個小時執行一次指令 mail ...
*/5 * * * * root run-parts /root/runcron
建立一個 /root/runcron 的目錄,將要每隔五分鐘執行的『可執行檔』都寫到該目錄下,就可以讓系統每五分鐘執行一次該目錄下的所有可執行檔。
這樣就可以曉得 run-parts 的用意了吧!此外,與 crontab -e 規劃當中最不相同的就是多了一個『使用者層級』的概念,通常我們都是以 root 的角度來規劃例行性命令,但是總有不需要 root 的指令吧!就可以使用這個層級來規範該程序的使用者屬於誰囉!