【问题标题】:SharePoint Timer Job is running but not executingSharePoint 计时器作业正在运行但未执行
【发布时间】:2015-02-03 15:36:50
【问题描述】:

此功能的范围是网站集级别。激活该功能后,将在 Web 应用程序中创建计时器作业,其通用名称包括它应该在其中运行的网站集 URL。理论上,当在网站集中停用该功能时,它会停止在那里执行,但任何在其他网站集上激活的其他计时器作业功能仍会运行。

using Microsoft.SharePoint
using Microsoft.SharePoint.Administration

class DailyAlerts() : SPJobDefinition
{
   public DailyAlerts() : base() { }

   public DailyAlerts(string jobName, SPWebApplication webApp) : base(jobName, webApp, null, SPJobLockType.Job)
   {
      this.Title = jobName;
   }

   public override void Execute(Guid targetInstanceId)
   {
      // CHANGE THE SITE COLLECTION'S ROOT WEB SITE DESCRIPTION TO THE CURRENT TIME
   }
}

部署解决方案并在一个网站集上激活它后,该作业从未执行任何自定义代码。这篇文章帮助解决了这个问题: http://www.wahidsaleemi.com/2009/08/sharepoint-timer-jobs-not-running/。停止 SP 定时器服务器,删除缓存的 XML 文件,并启动服务后,激活的站点集合定时器作业完美执行。

但是,在不同的网站集上激活自定义计时器功能会导致该特定网站集的计时器作业未执行的相同初始问题。第一个计时器作业(清除缓存后)仍然可以正常工作。

由于某些用户可以控制可以打开/关闭功能,您可以看到这会让人们感到沮丧。制作新网站集时,必须激活该功能,但它不会运行,直到...清除缓存?我在这里错过了什么?

提前致谢。

【问题讨论】:

  • 顺便说一句,事件接收器总是正常工作。

标签: c# sharepoint sharepoint-2010 sharepoint-2013 sharepoint-timer-job


【解决方案1】:

服务可以用powershell重置,我建议对功能进行描述,只是说功能的全部功能要到第二天才能显现出来。

让您的功能在农场或网络应用级别更新属性包变量。

编写一个 powershell 脚本然后扫描变量,如果变量等于 true,则运行脚本并通知某人重新启动。显然将变量重置回原来的样子。将此脚本绑定到其中一台 SP 服务器的任务调度程序,以便在夜间运行一次,远离任何备份和搜索作业。这意味着如果您需要手动启动它,您也可以通过任务调度程序来完成!

这意味着该过程是自动化的,但您只是在需要时强制计时器作业重新启动。

干杯 真实的

【讨论】:

  • 这是一个很好的解决方案,但不适用于这个项目。事情必须是实时的。功能独家新闻已从站点更改为 Web 应用程序。我在 Web 应用根 Web 上维护一个自定义列表,该列表指定计时器作业应在哪些网站集上执行。希望在生产中,计时器作业永远不会在大量网站集上超时。
  • 考虑到您的要求,这不是一个坏方法,如果您确实遇到超时,您可以随时捕获错误并将电子邮件记录到共享收件箱中,这样您就可以主动响应而不是等待用户通知您:)
猜你喜欢
  • 2014-05-27
  • 2010-09-05
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多