您如何处理在 IIS 上运行的网站的计划任务?

Posted

技术标签:

【中文标题】您如何处理在 IIS 上运行的网站的计划任务?【英文标题】:How do you handle scheduled tasks for your websites running on IIS? 【发布时间】:2010-09-27 20:01:33 【问题描述】:

我有一个在 Windows 服务器上运行的网站,我想添加一些计划的后台任务来执行各种任务。例如,客户希望用户接收总结网站最近活动的电子邮件。

如果发送电子邮件是唯一需要执行的任务,我可能会设置一个运行脚本来发送这些电子邮件的计划任务。但是,对于这个特定站点,客户希望执行各种不同的计划任务,其中一些始终运行,而另一些则仅在满足某些条件时才运行。现在,他们已经给了我一些他们希望看到实施的初始设置,但我知道未来还会有更多。

我想知道是否有一个简单的 Windows 解决方案允许我定义需要运行的任务,然后有一个每天运行的计划任务并执行已定义的每个计划任务。批处理文件是执行此操作的最简单方法,还是我可以使用其他一些解决方案?

【问题讨论】:

【参考方案1】:

为了简单起见,我会避免构建一个大型的单体 exe,并将要完成的工作分解为单独的任务,并为每个任务设置一个 Windows 计划任务。这样您就可以更轻松地维护代码库并在更精细的级别更改功能。

稍后,您可以构建一个 Windows 服务,该服务根据计划为每个不同的任务动态加载插件。这对于未来的项目可能更可重用。

但老实说,如果你在截止日期前,我会应用 KISS 原则并为每个任务安排一个计划任务。

【讨论】:

到目前为止,我只与客户进行了头脑风暴,所以我还没有真正按计划进行。现在,为他们想要的每个任务添加计划任务很容易,但如果网站变得流行,他们可能会要求一大堆其他任务。 @Kev:我创建了一个 Process 对象并从站点运行 schtasks。当站点在 IIS 上时,它不起作用。可能是什么原因? @AJ - 很难说。为什么不发布一个新问题? @Kev: ***.com/questions/15067300/…【参考方案2】:

我会直接使用 Windows 服务。这将是满足您的需求的最可扩展的方法,创建服务不会增加您的开发时间,并且可能会在不久的将来为您节省时间。

【讨论】:

【参考方案3】:

我们使用 Windows 调度程序服务来启动小型控制台应用程序,该应用程序只是将参数传递给 Web 服务。

例如,如果用户有计划报告 #388 和 #88,计划任务会使用如下所示的命令行创建:

c:\launcher\app.exe 报告:388 报告:88

当调度程序触发时,这个应用程序只是在 web 服务上执行 web 方法,例如 InternalService.SendReport(int id)。

通常,您的 Web 应用程序中已经具备所有必需的业务逻辑。这种方法可以轻松使用它,因此无需使用可插入模块等创建任何复杂的 .exe 或 windows 服务。

【讨论】:

【参考方案4】:

从预定的 EXE 而不是从网页内部执行操作的问题在于,这些操作可能会受益于,甚至完全需要,网页将拥有的资源 - - IIS 缓存和 ORM 缓存是我想到的两件事。在 ORM 的情况下,在 Web 应用程序上下文之外进行数据库更改甚至可能是致命的。我的偏好是安排 curl.exe 从 localhost 请求网页。

【讨论】:

啊 ... Oleg 的使用 exe 调用 WEB SERVICE 的答案融合了两全其美的优点 - 用于调度的灵活参数,以及在 IIS 环境中运行的实际作业。我会给他打分,但我没有代表。【参考方案5】:

使用 Windows 计划任务或创建一个自行执行计划的 Windows 服务。

【讨论】:

以上是关于您如何处理在 IIS 上运行的网站的计划任务?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理在运行时确定类型的数组的声明和分配?

在 ASP.NET MVC 网站中运行计划任务

windows2008设置IIS服务器定时自动重启的方法

如何让IIS定时自动重新启动

如何处理在 HTML5 画布上绘制的形状并更改其属性?

团队计划