天天看點

IT人學會寫cron,減少你的工作量!

crontab

指令常見于Unix和類Unix的作業系統之中,用于設定周期性被執行的指令。該指令從标準輸入裝置讀取指令,并将其存放于“crontab”檔案中,以供之後讀取和執行。該詞來源于希臘語 chronos(χρνο),原意是時間。

通常,

crontab

儲存的指令被守護程序激活,

crond

常常在背景運作,每一分鐘檢查是否有預定的作業需要執行。這類作業一般稱為cron jobs。

crontab指令的功能是在一定的時間間隔排程一些指令的執行。

在/etc目錄下有一個crontab檔案,這裡存放有系統運作的一些排程程式。每

個使用者可以建立自己的排程crontab。

crontab指令有三種形式的指令行結構:

crontab [-u user] [file]

crontab [-u user] [-e|-l|-r]

crontab -l -u [-e|-l|-r]

第一個指令行中,file是指令檔案的名字。如果在指令行中指定了這個檔案,那麼執行crontab指令,則将這個檔案拷貝到crontabs目錄下;如果在指令行中沒有制定這個檔案,crontab指令将接受标準輸入(鍵盤)上鍵入的指令,并将他們也存放在crontab目錄下。

指令行中-r選項的作用是從/usr/spool/cron/crontabs目錄下删除使用者定義的檔案crontab;

指令行中-l選項的作用是顯示使用者crontab檔案的内容。

使用指令crontab -u user -e指令編輯使用者user的cron(c)作業。使用者通過編輯檔案來增加或修改任何作業請求。

執行指令crontab -u user -r即可删除目前使用者的所有的cron作業。

作業與它們預定的時間儲存在檔案/usr/spool/cron/crontabs/username裡。username使使用者名,在相應的檔案中存放着該使用者所要運作的指令。指令執行的結果,無論是标準輸出還是錯誤輸出,都将以郵件形式發給使用者。檔案裡的每一個請求必須包含以spaces和tabs分割的六個域。前五個字段可以取整數值,指定何時開始工作,第六個域是字元串,稱為指令字段,其中包括了crontab排程執行的指令。

第一道第五個字段的整數取值範圍及意義是:

0~59 表示分

1~23 表示小時

1~31 表示日

1~12 表示月份

0~6 表示星期(其中0表示星期日)

/usr/lib/cron/cron.allow表示誰能使用crontab指令。如果它是一個空檔案表明沒有一個使用者能安排作業。如果這個檔案不存在,而有另外一個檔案/usr/lib/cron/cron.deny,則隻有不包括在這個檔案中的使用者才可以使用crontab指令。如果它是一個空檔案表明任何使用者都可安排作業。兩個檔案同時存在時cron.allow優先,如果都不存在,隻有超級使用者可以安排作業。

任務排程的crond常駐指令

crond 是linux用來定期執行程式的指令。當安裝完成作業系統之後,預設便會啟動此任務排程指令。crond指令每分锺會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。而linux任務排程的工作主要分為以下兩類:

1、系統執行的工作:系統周期性所要執行的工作,如備份系統資料、清理緩存

2、個人執行的工作:某個使用者定期要做的工作,例如每隔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 檔案,即vim /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"這個參數了,如果去掉這個參數的話,後面就可以寫要運作的某個腳本名,而不是檔案夾名了

at指令的用法

At

列出在指定的時間和日期在計算機上運作的已計劃指令或計劃指令和程式。必須正在運作“計劃”服務才能使用 at 指令。

at [\\computername] [[id] [/delete] | /delete [/yes]]

at [\\computername] time [/interactive] [/every:date[,...]| /next:date[,...]] command

參數

如果在沒有參數的情況下使用,則 at 列出已計劃的指令。

\\computername

指定遠端計算機。如果省略該參數,指令将安排在本地計算機。

id

指定指派給已計劃指令的識别碼。

/delete

取消已計劃的指令。如果省略了 id,計算機中已計劃的指令将被全部取消。

/yes

當删除已計劃的事件時,對系統的查詢強制進行肯定的回答。

time

指定運作指令的時間。将時間以 24 小時标記(00:00 [午夜] 到 23:59)的方式表示為小時:分鐘。

/interactive

允許作業與在作業運作時登入使用者的桌面進行互動。

/every:date[,...]

在每個星期或月的指定日期(例如,每個星期四,或每月的第三天)運作指令。将 date 指定為星期的一天或多天 (M,T,W,Th,F,S,Su),或月的一天或多天(使用 1 到 31 的數字)。用逗号分隔多個日期項。如果省略了 date,将假定為該月的目前日期。

/next:date[,...]

在重複出現下一天(例如,下個星期四)時,運作指定指令将 date 指定為星期的一天或多天 (M,T,W,Th,F,S,Su),或月的一天或多天(使用 1 到 31 的數字)。用逗号分隔多個日期項。如果省略了 date,将假定為該月的目前日期。

command

指定要運作的 Windows 2000 指令、程式(.exe 或 .com 檔案)或批處理程式(.bat 或 .cmd 檔案)。當指令需要路徑作為參數時,請使用絕對路徑,也就是從驅動器号開始的整個路徑。如果指令在遠端計算機上,請指定伺服器和共享名的 UNC 符号,而不是遠端驅動器号。如果指令不是可執行 (.exe) 檔案,必須在指令前加上 cmd /c,例如:

cmd /c dir > c:\test.out

體驗Windows 系統内置的AT指令

  AT指令是Windows 中内置的指令,它也可以媲美Windows中的“計劃任務”,而且在計劃的安排、任務的管理、工作事務的處理方面,AT指令具有更強大更神通的功能。AT指令可在指定時間和日期、在指定計算機上運作指令和程式。

  我們可以在“開始→運作”中輸入AT指令,下面就來看看AT指令的一些執行個體分析。

  1、定時關機

  指令:at 21:00 ShutDown –S –T30

  該指令運作後,到了21:00點,電腦會出現“系統關機”對話框,并預設30秒延時自動關機。

  2、定時提醒

  指令:at 12:00 Net Send 192.168.2.2與朋友約會的時間到了,快點準備出發吧!

  其中Net Send是Windows内部程式,可以發送消息到網絡上的其他使用者、計算機。192.168.2.2是本機電腦的IP位址。

繼續閱讀