After installing the August 2011 Cumulative Update, a health warning about User Profile Service jobs appears every hour

Every hour, a health error will appear regarding each User Profile Service Application instance regarding a missing Timer Job for the User Profile Service Application or User Profile Service Application Proxy:

image3

The ULS logs state:

UserProfileInstalledJobsHealthRule.Check – missing job ‘Microsoft.Office.Server.UserProfiles.ADImport.UserProfileADImportJob’ for UserProfileApp ‘User Profile Services’

Microsoft included a new job that remains unused in the August 2011 Cumulative Update called the “UserProfileADImportJob”. While Microsoft is checking for all job types, which includes this new job:

public override SPHealthCheckStatus Check()
{
	SPHealthCheckStatus passed = SPHealthCheckStatus.Passed;
	if (UserProfileService.Service != null)
	{
		foreach (UserProfileApplication application in UserProfileService.Service.Applications)
		{
			foreach (Type type in UserProfileApplicationJob.Types)
			{
				if (!application.JobExists(type))
				{
					ULS.SendTraceTag(0x66326e6f, ULSCat.msoulscat_SPS_UserProfiles, ULSTraceLevel.Medium, "UserProfileInstalledJobsHealthRule.Check - missing job '{0}' for UserProfileApp '{1}'", new object[] { type, application.Name });
					passed = SPHealthCheckStatus.Failed;
				}
			}	
		}
	}
}

Microsoft does not install that job:

internal void InstallJobs()
{
	this.EnsureAccess(base.Farm.TimerService.ProcessIdentity);
	foreach (Type type in UserProfileApplicationJob.Types)
	{
		if (type != typeof(UserProfileADImportJob))
		{
			this.InstallJob(type);
		}
	}
}

Perhaps the code was not ready for the August Cumulative Update? Unsure, but you will be stuck with the Health error until the job is installed. At least until the next CU, it should be safe to disable the missing job rule for the User Profile Application.

EDIT: This has been fixed in the October 2011 CU by ignoring the UserProfileADImportJob in the Health Check:

public override SPHealthCheckStatus Check()
{
	SPHealthCheckStatus passed = SPHealthCheckStatus.Passed;
	if (UserProfileService.Service != null)
	{
		foreach (UserProfileApplication application in UserProfileService.Service.Applications)
		{
			foreach (Type type in UserProfileApplicationJob.Types)
			{
				if ((type != typeof(UserProfileADImportJob)) && !application.JobExists(type))
				{
					ULS.SendTraceTag(0x66326e6f, ULSCat.msoulscat_SPS_UserProfiles, ULSTraceLevel.Medium, "UserProfileInstalledJobsHealthRule.Check - missing job '{0}' for UserProfileApp '{1}'", new object[] { type, application.Name });
					passed = SPHealthCheckStatus.Failed;
				}
			}
		}
	}
}

Trevor Seward is a Microsoft Office Apps and Services MVP who specializes in SharePoint Server administration, hybrid scenarios, and SharePoint Online. He has been working with SharePoint for 16 years from SharePoint 2003 on up, managing environments with terabytes of content for 150,000+ user organizations. Trevor is an author of Deploying SharePoint 2016 and Deploying SharePoint 2019. You can find him on Twitter and in /r/sharepoint.