十年磨一劍--從程序員到架構師

一个.net程序员,一个企业应用的开发者,喜欢系统架构,数据库,领域驱动,面向对象,表现层技术。关注重用的理论和实践。设计原则:简单,快速,适应变化能力强,表现层灵活多变...

博客园 首页 新随笔 联系 订阅 管理
  49 Posts :: 0 Stories :: 721 Comments :: 26 Trackbacks

公告

理解一下windows server 排程(Job)at命令的進階版:

schtasks /create命令

建立一個排程必須要有

1.排程的名字(唯一)

TN:Task Name(必須)

 

2.執行什么程式

TR:Task Run(必須)

 

3.用什么賬戶執行排程

RU:Run User(必須)

RP:Run Password(必須)

 

4.重頭戲:頻率

SC:Schedule(必須)

每分鐘 , 每小時 還是 每天 / 每周 /每月 ?

 

如果要真的every,則不太靈活,因此再提供一個間隔

MO:modifier(默認1)

即每幾分鐘,每幾小時或每幾天,每幾周,每幾個月執行一次

 

5.什么時候執行?

一支程式總有一個精確的時間開始執行

ST:StartTime(默認當前時間)

 

這個時間以分鐘表示

那那些每分鐘要執行的,每三分鐘要執行的呢?

當然就是從什么時間開始每分鐘,每三分鐘執行一次了

 

6.有了開始執行時間,當然就有停止執行的時間了

ET:EndTime

每分鐘執行,每小時執行的排程,可能只需要執行到22:00就不要執行排程了

 

但如果是每(幾)天,每(幾)周,每(幾)月執行一次呢?

執行一次當然不需要幾天,幾周,幾月了(不鉆牛角尖,說有的程式要執行幾年的)

結束時間是否就沒有意義呢?

同樣,這就引出了如果是按天,周,月執行,是不是真的就執行一次

答案顯示是否定的

比如以每兩天的頻率執行的排程,可能需要在執行日期內,上午一次,下午一次,或每3分鐘一次

同樣每周,每月執行的排程也存在上述這種情況,也需要重複執行

 

7.這就是每日,每周,每月的重複執行間隔(以分鐘為單位)

RI:Run Interval(如果有ET,或下面的DU,則默認為10分鐘)

 

有了這個東東,上面的ET同樣也就對日,月,周有效了

聰明的同學可能到這里就會想到

以每1天的頻率,然後再加以重複執行間隔

應該就可以替代每分,每小時的SC設定了

答案是非常正確

windows的排程設定界面,就沒有讓你選擇每分鐘,每小時的頻率選項

好了,為了簡單起見,就認為頻率只縮小到日,周,月就行了,而把小時,分鐘看成是每日執行的重複執行

 

8.再回到結束時間上來

可能有時候直接設定一個準確的時間作為結束

DU: duration

但有時也可以直接設定重複執行多少分鐘后就停止

事實上在win2003上的排程管理界面中,輸入ET是會被自動換算成DU的

因此這兩個其實是一個意思,表達方式不一樣罷了

不過一般情況下,我自己還是ET用得多,也方便

 

9.好了,在那些執行頻率很密集的排程,如每分鐘執行一次,但是某次的執行時間可能超過一分鐘,下次排程要不要啟動呢

如果不想啟動,那就

K:Kill

 

10.討論了時間,我們再來討論日期吧

對于每天(每小時,每分鐘就不談了)來說,沒有具體的日期選擇,都是每天

而對于每周,就可以選擇星期幾執行

D:Days MON,TUE…

用逗號可以設定多個

 

而每月,則可以選擇幾號執行

D:Days 1,2,5…

哪些月執行

M:Months JAN,FEB…

 

另外如果是每月執行

在這里有一個MO的特例(MO不表示每隔幾月執行)

MO可以設為first,second,last,lastday等

然後再在D中設定星期幾

表示在每月的第一個,第二個,最后一個星期幾,最后一天執行

 

11.好了,有了開始時間和結束時間

那開始日期和結束日期同樣存在

不管是每分,每小時

還是每日,每周,每月

都可以設定開始日期和結束日期

SD:Start Date(默認今天)

ED:End Date

 

12.強制建立

/F

當前Job名稱存在,則強行Update

 

除了上面所說的SC頻率外

還有以下SC類型

ONCE、ONSTART、ONLOGON,ONIDLE

一般在系統中用得比較少

所以也沒有關注

 

可以通過 Schtasks /Create /?

來獲取全部信息

 

此外,對于非英文操作系統

如繁體中文操作系統

這個命令還非常變態

SC,M,D等選項居然使用當前語言

如每日,每週,每月

如星期一,星期二

如一月(這個一直沒有成功,我也不知道用什么代替Jan,Feb等)

 

兩個示例如下:

強制建立排程test

每隔3分鐘執行1次xxx.exe,從早上7:00到晚上22:00

如果還在執行,則不執行

schtasks /create /tn test /f

/tr xxx.exe

/ru useracount /rp password

/sc dayly

/st 07:00

/et 22:00

/ri 3

/k

 

強制建立排程test

每年一月,三月的5號

從早上10:00開始,到晚上22:00結束,每隔5分鐘執行一次執行xxx.exe

如果還在執行,則不執行

schtasks /create /tn test /f

/tr xxx.exe

/ru useracount /rp password

/sc monthly

/m Jan,Mar

/d 5

/st 10:00

/et 22:00

/ri 5

/k

posted on 2010-12-18 11:32 Kevin Zou 阅读(...) 评论(...) 编辑 收藏