(6)設(shè)置Repeat Interval參數(shù) |
[君三思] 2009-8-18 |
3.3 設(shè)置Repeat IntervalJob 和Schedule中REPEAT_INTERVAL參數(shù)都是用來控制執(zhí)行的頻率或周期,雖然說周期是一個(gè)時(shí)間性概念,不過REPEAT_INTERVAL指定的時(shí)候并不是一個(gè)時(shí)間值,而是由一組關(guān)鍵字描述的時(shí)間。 除了前面介紹Job和Schedule的REPEAT_INTERVAL參數(shù)時(shí),提到該參數(shù)擁有FREQ以及INTERVAL兩個(gè)關(guān)鍵字,其實(shí)除此之外,還有如BYMONTH、BYWEEKNO、BYYEARDAY、BYDATE等等參數(shù),可以用來進(jìn)行更精確的定義,比如通過BYMONTH關(guān)鍵字指定調(diào)度運(yùn)行的月份,BYDAY指定調(diào)度在哪天運(yùn)行等等。 REPEAT_INTERVAL 參數(shù)的詳細(xì)語法如下: repeat_interval = regular_schedule | combined_schedule ============================== regular_schedule = frequency_clause [";" interval_clause] [";" bymonth_clause] [";" byweekno_clause] [";" byyearday_clause] [";" bydate_clause] [";" bymonthday_clause] [";" byday_clause] [";" byhour_clause] [";" byminute_clause] [";" bysecond_clause] [";" bysetpos_clause] [";" include_clause] [";" exclude_clause] [";" intersect_clause][";" periods_clause] [";" byperiod_clause] ============================== combined_schedule = schedule_list [";" include_clause] [";" exclude_clause] [";" intersect_clause] frequency_clause = "FREQ" "=" ( predefined_frequency | user_defined_frequency ) predefined_frequency = "YEARLY" | "MONTHLY" | "WEEKLY" | "DAILY" | "HOURLY" | "MINUTELY" | "SECONDLY" user_defined_frequency = named_schedule ============================== interval_clause = "INTERVAL" "=" intervalnum intervalnum = 1 through 99 bymonth_clause = "BYMONTH" "=" monthlist monthlist = monthday ( "," monthday)* month = numeric_month | char_month numeric_month = 1 | 2 | 3 ... 12 char_month = "JAN" | "FEB" | "MAR" | "APR" | "MAY" | "JUN" | "JUL" | "AUG" | "SEP" | "OCT" | "NOV" | "DEC" byweekno_clause = "BYWEEKNO" "=" weeknumber_list weeknumber_list = weeknumber ( "," weeknumber)* weeknumber = [minus] weekno weekno = 1 through 53 byyearday_clause = "BYYEARDAY" "=" yearday_list yearday_list = yearday ( "," yearday)* yearday = [minus] yeardaynum yeardaynum = 1 through 366 bydate_clause = "BYDATE" "=" date_list date_list = date ( "," date)* date = [YYYY]MMDD [ offset | span ] bymonthday_clause = "BYMONTHDAY" "=" monthday_list monthday_list = monthday ( "," monthday)* monthday = [minus] monthdaynum monthdaynum = 1 through 31 byday_clause = "BYDAY" "=" byday_list byday_list = byday ( "," byday)* byday = [weekdaynum] day weekdaynum = [minus] daynum daynum = 1 through 53 /* if frequency is yearly */ daynum = 1 through 5 /* if frequency is monthly */ day = "MON" | "TUE" | "WED" | "THU" | "FRI" | "SAT" | "SUN" byhour_clause = "BYHOUR" "=" hour_list hour_list = hour ( "," hour)* hour = 0 through 23 byminute_clause = "BYMINUTE" "=" minute_list minute_list = minute ( "," minute)* minute = 0 through 59 bysecond_clause = "BYSECOND" "=" second_list second_list = second ( "," second)* second = 0 through 59 bysetpos_clause = "BYSETPOS" "=" setpos_list setpos_list = setpos ("," setpos)* setpos = [minus] setpos_num setpos_num = 1 through 9999 ============================== include_clause = "INCLUDE" "=" schedule_list exclude_clause = "EXCLUDE" "=" schedule_list intersect_clause = "INTERSECT" "=" schedule_list schedule_list = schedule_clause ("," schedule_clause)* schedule_clause = named_schedule [ offset ] named_schedule = [schema "."] schedule periods_clause = "PERIODS" "=" periodnum byperiod_clause = "BYPERIOD" "=" period_list period_list = periodnum ("," periodnum)* periodnum = 1 through 100 ============================== offset = ("+" | "-") ["OFFSET:"] duration_val span = ("+" | "-" | "^") "SPAN:" duration_val duration_val = dur-weeks | dur_days dur_weeks = numofweeks "W" dur_days = numofdays "D" numofweeks = 1 through 53 numofdays = 1 through 376 minus = "-"這個(gè)語法形式看起來復(fù)雜無比,其實(shí)實(shí)用起來很簡單,之所以看起來復(fù)雜,是因?yàn)槠涔δ芴^靈活(之前的三思系列筆記中,已經(jīng)闡述過靈活與復(fù)雜的關(guān)系),這里不準(zhǔn)備逐條解釋每一個(gè)語法細(xì)節(jié),下面將著重通過一些常用設(shè)置,希望能夠更有助于廣大同仁的理解。 例如:設(shè)置任務(wù)僅在周5的時(shí)候運(yùn)行: REPEAT_INTERVAL => ¨FREQ=DAILY; BYDAY=FRI¨; REPEAT_INTERVAL => ¨FREQ=WEEKLY; BYDAY=FRI¨; REPEAT_INTERVAL => ¨FREQ=YEARLY; BYDAY=FRI¨;上述三條語句雖然指定的關(guān)鍵字小有差異,不過功能相同。 設(shè)置任務(wù)隔一周運(yùn)行一次,并且僅在周5運(yùn)行:
設(shè)置任務(wù)在當(dāng)月最后一天運(yùn)行:
設(shè)置任務(wù)在3月10日運(yùn)行:
REPEAT_INTERVAL => ¨FREQ=YEARLY; BYDATE=0310¨; 上述兩條語句功能相同。 設(shè)置任務(wù)每10隔天運(yùn)行:
設(shè)置任務(wù)在每天的下午4、5、6點(diǎn)時(shí)運(yùn)行:
設(shè)置任務(wù)在每月29日運(yùn)行:
設(shè)置任務(wù)在每年的最后一個(gè)周5運(yùn)行:
設(shè)置任務(wù)每隔50個(gè)小時(shí)運(yùn)行:
另外,你是否在懷念常規(guī)job中設(shè)置interval的簡便,雖然功能較弱,但是設(shè)置操作非常簡單,無須懊惱,其實(shí)SCHEDULER中的REPEAT_INTERVAL也完全可以按照那種方式設(shè)置,前面都說了,REPEAT_INTERVAL實(shí)際上是指定周期,直接指定一個(gè)時(shí)間值,當(dāng)然也是周期嘍。 比如說,設(shè)置任務(wù)每天執(zhí)行一次,也可以設(shè)置REPEAT_INTERVAL參數(shù)值如下:
又比如設(shè)置任務(wù)每周執(zhí)行一次:
不過需要注意,這種方式僅用于創(chuàng)建SCHEDULER中jobs時(shí)使用,不能用于schedule。 |