伺服器需要定時處理一些任務,一般是可以利用linux系統的crontab來處理,可以精确到分鐘。windows下面也有計劃任務,但是以前網管就說這個有漏洞,win2003的伺服器都不給啟用。
引用
crond 是linux用來定期執行程式的指令。當安裝完成作業系統之後,預設便會啟動此任務排程指令。crond指令每分锺會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。而linux任務排程的工作主要分為以下兩類:
1、系統執行的工作:系統周期性所要執行的工作,如備份系統資料、清理緩存
2、個人執行的工作:某個使用者定期要做的工作,例如每隔10分鐘檢查郵件伺服器是否有新信,這些工作可由每個使用者自行設定。
在crontab裡面,有幾個點内容而已:
執行時間、執行使用者、執行内容
1 執行時間
分 時 日 月 天每星期
如果不需要指定的地方,可以用 * 來代表,否則就是指定的
也可以使用 */10 指定每10個機關
比如 */10 * * * * 表示每10分鐘執行一次
任務排程設定檔案的寫法
其格式如下:
Minute Hour Day Month Dayofweek command
分鐘 小時 天 月 天每星期 指令
每個字段代表的含義如下:
Minute 每個小時的第幾分鐘執行該任務
Hour 每天的第幾個小時執行該任務
Day 每月的第幾天執行該任務
Month 每年的第幾個月執行該任務
DayOfWeek 每周的第幾天執行該任務
Command 指定要執行的程式
在這些字段裡,除了“Command”是每次都必須指定的字段以外,其它字段皆為可選字段,可視需要決定。對于不指定的字段,要用“*”來填補其位置。
舉例如下:
1、指定每小時的第5分鐘執行一次ls指令
5 * * * * ls
2、指定每天的 5:30 執行ls指令
30 5 * * * ls
3、指定每月8号的7:30分執行ls指令
30 7 8 * * ls
4、指定每年的6月8日5:30執行ls指令
30 5 8 6 * ls
5、指定每星期日的6:30執行ls指令
30 6 * * 0 ls
注:0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等。
6、每月10号及20号的3:30執行ls指令
30 3 10,20 * * ls
注:“,”用來連接配接多個不連續的時段
7、每天8-11點的第25分鐘執行ls指令
25 8-11 * * * ls
注:“-”用來連接配接連續的時段
8、每15分鐘執行一次ls指令
*/15 * * * * ls
即每個小時的第0 15 30 45 60分鐘執行ls指令
9、每個月中,每隔10天6:30執行一次ls指令
30 6 */10 * * ls
即每月的1、11、21、31日是的6:30執行一次ls指令。
10、每天7:50以root 身份執行/etc/cron.daily目錄中的所有可執行檔案
50 7 * * * root run-parts /etc/cron.daily
注:run-parts參數表示,執行後面目錄中的所有可執行檔案。
新增排程任務
新增排程任務可用兩種方法:
1、在指令行輸入: crontab -e 然後添加相應的任務,wq存盤退出。
2、直接編輯/etc/crontab 檔案,即vi /etc/crontab,添加相應的任務。
檢視排程任務
crontab -l //列出目前的所有排程任務
crontab -l -u jp //列出使用者jp的所有排程任務
删除任務排程工作
crontab -r //删除所有任務排程工作
任務排程執行結果的轉向
例1:每天5:30執行ls指令,并把結果輸出到/jp/test檔案中
30 5 * * * ls >/jp/test 2>&1
注:2>&1 表示執行結果及錯誤資訊。
編輯/etc/crontab 檔案配置cron
cron服務每分鐘不僅要讀一次/var/spool/cron内的所有檔案,還需要讀一次/etc/crontab,是以我們配置這個檔案也
能運用cron服務做一些事情。用crontab配置是針對某個使用者的,而編輯/etc/crontab是針對系統的任務。此檔案的檔案格式是:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出現錯誤,或者有資料輸出,資料作為郵件發給這個帳号
HOME=/ //使用者運作的路徑,這裡是根目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小時執行/etc/cron.hourly内的腳本
02 4 * * * root run-parts /etc/cron.daily //每天執行/etc/cron.daily内的腳本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期執行/etc/cron.weekly内的腳本
42 4 1 * * root run-parts /etc/cron.monthly //每月去執行/etc/cron.monthly内的腳本
大家注意"run-parts"這個參數了,如果去掉這個參數的話,後面就可以寫要運作的某個腳本名,而不是檔案夾名了。
crontab檔案有六個域,每個域之間用空格或者Tab鍵分開,前五個域都是整數或者*,格式如下(括号裡面是取值範圍):
分鐘(0-59) 小時(0-23) 日(1-31) 月(1-12) 星期(0-6) 要執行的指令
其中星期取值0指星期日,其它取值遞推。前面五個域,每個域都可以用*表示所有合法的值,或者用一個清單列出合法的值,各值之間用“,”隔開,也可以用“-”表示一個範圍。下面的指令示範每個星期,星期日到星期四晚上執行/home/wuxp/backup.sh。
30 23 * * 0-4 /home/wuxp/backup.sh
下面的例子示出每星期星期一到星期五3:15厘清除使用者目錄下的core檔案
15 3 * * 1-5 find $HOME -name core 2>/dev/null |xargs rm -f
重新啟動OS的定時服務,使新添加的任務生效。
Sun Solaris
#/etc/rc2.d/S75cron stop
#/etc/rc2.d/S75cron start
Linux
#/etc/rc.d/init.d/crond restart
這樣系統就會定時執行計劃任務。