Windows任务调度程序如何可靠地调度代码重复运行?

时间:2009-04-06 18:47:54

标签: windows-services scheduled-tasks task

我有一些代码需要安装在Windows Server 2003机器上并且每分钟运行一次。

建议的处理方法是什么?是否可以将其设计为控制台服务,只需让任务调度程序立即命中它? (这甚至可能吗?)我应该把它搞砸并把它写成Windows服务吗?

8 个答案:

答案 0 :(得分:12)

由于它需要每分钟运行一次,我建议编写一个Windows服务。这不是很复杂,如果你以前从未这样做过,那么你可以很好地了解它是如何完成的。

我不建议每分钟调用一次预定任务。

答案 1 :(得分:5)

我会说它吮吸并将其写为Windows服务。我没有发现计划任务非常可靠,当它没有运行时,我还没有找到一个简单的方法来找出它没有的原因。

答案 2 :(得分:3)

Windows Scheduled Tasks对于我们的目的而言相当可靠,并且由于其易于安装和高级恢复功能,我们几乎在所有情况下都支持Windows服务。如果写入的代码的一部分最终被锁定或在一段不应该存在的代码中循环,那么Windows服务的永远性质可能最终成为一个问题。我们通常在一个代码中编写代码时尚与此相似

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

然后,作为计划任务的一部分,我们对进程运行的时间设置了时间限制,如果进程运行的时间过长,则会终止进程。如果我们确实有一段代码遇到问题,则Scheduled Tasks会终止它,并且该过程将在下一分钟启动。

答案 3 :(得分:2)

如果你需要让它每分钟运行一次,我会把它建成一个Windows服务。我不会将调度程序用于任何少于日常任务的事情。

答案 4 :(得分:2)

我会说这取决于它在做什么,但总的来说,我总是赞成拥有最少的层。如果您将其作为控制台服务编写并使用任务计划程序,那么您有两个地方可以继续维护。

如果您将其作为Windows服务编写,那么只有少一个地方可以检查以防出现问题。

答案 5 :(得分:2)

在搜索预定的服务帮助时,我遇到了一个非常好的article by Jon Galloway

如果将Windows服务用于计划任务,则存在各种缺点。我同意了。我建议使用任务计划,简单的实现。请参阅detailed information of implementing the task scheduler。希望这些信息有助于最终确定实施方法。

答案 6 :(得分:1)

唯一需要考虑的另一点是,如果您的工作涉及某种数据库交互,请考虑查看数据库提供的集成/调度服务。

例如,为SQL Server相关服务创建一个SSIS包可能看起来有点过分,但它可以很好地与环境集成,并且已经有了自己的日志/错误检查机制。

答案 7 :(得分:0)

我同意,即使创建一个控制台可执行文件并安排它每分钟运行也是一种浪费。我建议探索像Quartz.Net这样的东西。这样你就可以创建一个简单的工作并安排它每分钟运行一次。