简介

==========

MOSS在一定数量上的功能领域是非常依赖timer jobs的. Timer Jobs在一个固定的时间周期上运行, 然而不论如何, 它们总要在一个被赋予的schedule上执行. 如果你想要让某个特别的timer job按照你的想法来运行, 怎么办呢? 这篇文章会告诉你答案.


更换Timer Jobs的Schedule

==========

如果你想要强制执行一个MOSS的timer job, 很不幸, 你不能这样做. 因为每一个timer job都有一个固定的schedule.


有三种类型的schedule:


  • Minutes
  • Hourly
  • Daily

尽管你不能强制执行一个timer job, 你却毫无疑问地可以修改一个timer job的执行时间计划, 它能帮助你完成强制执行一个timer job的愿望. 比如说, Usage Analysis job是一个daily job. 它每天只执行一次. 如果说, 你想要这个job立即执行的话, 你可以把它从"Daily"修改为"Minutes".


所有内建的MOSS timer job都可以使用stsadm命令行的setproperty命令来修改. 要把usage analysis job从每24小时执行一次, 变为每5分钟执行一次, 你可以使用下面的命令:

stsadm -o setproperty -pn job-usage-analysis -pv "Every 5 minutes"


所有其他的内建的timer jobs的名字列在下面:


  • job-change-log-expiration
  • job-dead-site-delete
  • job-diskquota-warning
  • job-immediate-alerts
  • job-recycle-bin-cleanup
  • job-usage-analysis
  • job-workflow
  • job-workflow-autoclean
  • job-workflow-failover

不同频率的格式列表


Job frequency



Example time format



Immediate



"every 5 minutes between 0 and 59"



Daily



"daily between 22:00:00 and 06:00:00"

"daily between 0:00:00 and 01:00:00"



Weekly



"weekly between Fri 22:00:00 and Mon 06:00:00"

"weekly at Sat 0:00:00"



如果你有一个自定义的timer job的definition, 并且你还想修改它的schedule, 唯一我能想到的方法就是使用Object Model. 因为没有stsadm命令可以帮助你修改自定义的job. 下面就是一个代码例子, 它展示了如何修改一个custom job的schedule, 使它变为按分钟计算的那种schedule:

using (SPSite site = new SPSite("http://servername")) {      using(SPWeb web = site.OpenWeb())     {         SPFarm farm = site.WebApplication.Farm;         SPWebApplication webApp = site.WebApplication;         foreach (SPJobDefinition jobDef in webApp.JobDefinitions)         {             // if (jobDef.WebApplication == siteCollection.WebApplication)             // Console.WriteLine(jobDef.Title);             if (jobDef.Title == "Usage Analysis")             {                 jobDef.Schedule = new SPMinuteSchedule();                  jobDef.Update();                  break;             }         }     }



结论

===========

如果你想要执行一个很久之后才会再次执行的MOSS的timer job的时候, 你可以通过修改这个job的schedule来做到. 如果job是内建的, 那么你可以通过stsadm来修改. 如果job是一个自定义的, 那么唯一可行的方法就是通过MOSS的SDK.

运行下面的命令来立即执行administrative timer jobs

stsadm -o execadmsvcjobs