天天看點

linux筆記:crontab計劃任務

伺服器需要定時處理一些任務,一般是可以利用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

這樣系統就會定時執行計劃任務。

繼續閱讀