Windows任务计划程序在定期运行代码方面有多可靠?

6
我有一段代码需要在Windows Server 2003机器上运行,且每分钟运行一次。
处理这个问题的推荐方法是什么?是否将其设计为一个控制台服务并让任务计划程序每分钟触发它是可行的?(这样做可能吗?)或者我应该直接将其编写成Windows服务?
8个回答

12

由于需要每分钟运行一次,我建议编写一个Windows服务。 它并不是很复杂,如果您以前没有做过这个,学习如何完成它将是很棒的。

我不建议每分钟调用计划任务。


2
为什么在每分钟运行的情况下,您推荐使用Windows服务而不是任务计划程序?是什么让您选择了这个选项? - platypus

6

我建议你将其编写为Windows服务。我发现计划任务并不是很可靠,而当它无法运行时,我还没有找到一个简单的方法来找出原因。


2
事件日志应该显示它为什么没有执行。 - i_am_jorf
3
“should” 是关键词。我也发现预定任务不可靠,经常在事件日志中留下没有运行尝试的痕迹。 - Brian Knoblauch

3

对于我们的需求来说,Windows计划任务一直相当可靠,我们几乎在所有情况下都喜欢它们,而不是Windows服务,因为它们易于安装且具有高级恢复功能。如果代码的某个部分被锁定或循环执行了某个不应该执行的代码,则Windows服务始终处于开启状态可能会成为问题。我们通常以这种方式编写代码:

Init();
Run();
CleanUp();

作为定时任务的一部分,我们设置了一个进程运行的时间限制,并在超时时终止该进程。如果我们有一个有问题的代码段,定时任务将终止它并在下一分钟重新启动进程。


2

在寻找定时服务帮助的过程中,我发现了一篇非常好的Jon Galloway的文章

如果使用Windows服务进行定时任务,会有各种缺点。我同意这个观点。我建议使用Task Scheduler,它的实现很简单。请参考实现任务调度程序的详细信息。希望这些信息有助于确定实现方法。


2
如果你需要每分钟运行一次,我建议将其构建为Windows服务。对于不到每天一次的任务,我不建议使用计划程序。

2

我认为这取决于它要做什么,但总体而言,我始终支持尽可能少的层级。如果您将其编写为控制台服务并使用任务计划程序,则需要维护两个位置。

如果您将其编写为Windows服务,则只需少一个地方检查以防出现问题。


1
唯一需要考虑的另一点是,如果你的工作涉及某种数据库交互,请考虑查阅数据库提供的集成/调度服务。
例如,为 SQL Server 相关服务创建 SSIS 包可能看起来有些过度设计,但它可以与环境很好地集成,并已经具备自己的日志记录/错误检查机制。

0

我同意,创建一个控制台可执行文件并安排每分钟运行是一种浪费精力的做法。我建议尝试使用Quartz.Net这样的工具。这样你就可以创建一个简单的任务并安排它每分钟运行。


2
你似乎反对每分钟运行一次任务的想法...但是支持通过Quartz.Net来实现这个想法?我有什么遗漏吗? - Nathan Palmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接