简介
==========
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