6

我们有一个 SP 计时器作业,它运行了很长一段时间。最近,管理员将另一台服务器加入场,因此 SharePoint 决定开始在另一台服务器上运行此计时器作业。问题是服务器上没有安装所有依赖项(即 Oracle),因此作业失败。我只是在这里寻找阻力最小的路径。我的问题是有没有办法强制计时器作业在您想要的服务器上运行?

[编辑] 如果我可以通过适合我的代码来做到这一点。如果确实存在 API,我只需要知道执行此操作的 API 是什么。

4

5 回答 5

7

如果我在推动显而易见的事情,我深表歉意;我只是还没有看到有人深入研究它。

通过控制构造函数参数来约束自定义计时器作业(即您自己的从 SPJobDefinition 派生的计时器作业类)。

计时器作业通常在提交它们的服务器上运行(如 vinny 所示),假设在创建计时器作业期间未指定目标服务器。但是,SPJobDefinition 类型的两个重载构造函数分别接受一个 SPServer 和一个 SPJobLockType 作为第三个和第四个参数。正确使用这两个参数将使您能够决定作业的运行位置。

通过将目标服务器指定为 SPServer 并将 SPJobLockType 指定为“Job”,您可以限制您创建的计时器作业实例在您选择的服务器上运行。

有关我所描述的文档,请参阅 MSDN:http: //msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spjobdefinition.spjobdefinition.aspx

我对您正在运行的代码一无所知,但自定义计时器作业通常在功能激活期间设置。我感觉你的代码库可能不是你自己的(?);如果是这样,您可能需要查找派生自 SPFeatureReceiver 的一种或多种类型/类。在此类类的 FeatureActivated 方法中,您可能会找到实际执行计时器作业实例化的代码。

当然,您还需要查看自定义计时器作业类(或类)本身,以了解它们是如何被实例化的。有时开发人员会将类的实例化构建到类本身中(例如,通过工厂方法模式)。但是,在计时器作业类和 SPFeatureReceiver 实现之间,您应该正在寻找需要更改的内容。

我希望这会有所帮助!

于 2009-06-24T16:55:26.190 回答
2

场中的服务器需要相同。如果您碰巧将 VM 用于 Web 前端,则可以快照服务器并提供副本,以便您知道它们都是相同的。

于 2009-04-03T17:16:22.003 回答
1

每个定义的计时器作业在所有 Web 前端运行。

如果您需要在特定服务器上运行预定逻辑,则需要在计时器作业中专门对此进行编码,或者改用“标准”NT 服务。

于 2009-04-03T19:16:39.610 回答
1

我认为将 SPJobLockType 设置为“Job”的副作用是它将在提交作业的服务器上执行。

于 2009-04-17T21:45:30.713 回答
0

您可以使用业务日志实现 Web 服务并将该 Web 服务部署到一台机器上。然后您的 Timer Job 可以定期触发您的 Web 服务。

当您的计时器作业正在运行时,它并不那么重要。SharePoint 自行决定在何处运行计时器作业。

于 2009-04-03T23:13:34.970 回答