SharePoint 2016 search crawls not running automatically

Copper Contributor

After applying a cumulative update our SharePoint 2016 search crawls are not running automatically. When looking at the crawl configuration in CA it shows our crawl schedule is intact and incremental and full crawls are scheduled but no crawls are being run. We can manually start these crawls and they will run as expected, but will not run again after as scheduled.

 

We have tried the following:

  • restart the timer job service
  • modifying the crawl schedule
  • rebooting the server

We did look into resetting the timer jobs in CA but we were unable to find any trace of search timer jobs existing in the job definitions.

 

I have found other mentions of similar cases but the solutions that we did try didn't seem to help.

 

Has anyone run into this and how did you fix it?

 

5 Replies
Hello, Which was the update installed?

@Andres Gorzelany KB5002118 and KB5002183 Security Updates from Microsoft SharePoint Enterprise Server 2016

Hello, I've been scratching my head around this, did you look into ULS logs at the time that the schedule should start to see if you find any error related?

@Andres Gorzelany Ultimately, we had to fully recreate our SSA instance. Nothing we tried was able to bring back some of the missing services that, presumably when the update happened, got out of sync between our servers or had disappeared entirely. 

 

We did attempt a synchronization using the following which seem to work for others:

$svc = Get-SPEnterpriseSearchServiceInstance
$svc.Synchronize()

However, this revealed what I assume was a misconfiguration between our servers and led to the complete shutdown of our SSA. It looked as if our other server had, at some point, had been configured to run the search service so HealthMonitor would shutdown any attempt of search to function on the desired server.

 

I think the biggest issue outside of the misconfiguration was that our Indexing Schedule Manager job was completely gone, without this, no crawl would be scheduled on our desired search server. We could not find a way to bring this back during our troubleshooting with Microsoft.

 

We ended up using the following script to create a new search instance:

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
  
  # Specify the Settings for the Search Service Application
  $ServerName = (Get-ChildItem env:computername).value
  $IndexLocation = "E:\Search Index"
  $SearchServiceApplicationName = "Search Service Application 2016"
  $SearchServiceApplicationProxyName = "Search Service Application 2016 Proxy"
  $SearchDatabaseServer = "Name of Database server"
  $SearchServiceApplicationDatabase = "SP2016_Search_Service"
  
  $SearchAppPoolName = "Search Service Application pool"
  $SearchAppPoolAccount =  Get-SPManagedAccount ""
  
  #Check if Managed account is registered already
  Write-Host -ForegroundColor Yellow "Checking if the Managed Accounts already exists"
  $SearchAppPoolAccount = Get-SPManagedAccount -Identity $SearchAppPoolAccount -ErrorAction SilentlyContinue
  If ($SearchAppPoolAccount -eq $null)
  {
      Write-Host "Please Enter the password for the Service Account..."
      $AppPoolCredentials = Get-Credential $SearchAppPoolAccount
      $SearchAppPoolAccount = New-SPManagedAccount -Credential $AppPoolCredentials
  }
  
  #*** Step 1: Create Application Pool for Search Service Application ****
  #Get the existing Application Pool
  $SearchServiceAppPool = Get-SPServiceApplicationPool -Identity $SearchAppPoolName -ErrorAction SilentlyContinue
  #If Application pool Doesn't exists, Create it
  if (!$SearchServiceAppPool)
  {
      $SearchServiceAppPool = New-SPServiceApplicationPool -Name $SearchAppPoolName -Account $SearchAppPoolAccount
      write-host "Created New Application Pool" -ForegroundColor Green
  }
  
  #*** Step 2: Start Search Service Instances ***
  Start-SPEnterpriseSearchServiceInstance $ServerName -ErrorAction SilentlyContinue
  Start-SPEnterpriseSearchQueryAndSiteSettingsServiceInstance $ServerName -ErrorAction SilentlyContinue
  
  #*** Step 3: Create Search Service Application ****
  # Get the Search Service Application
  $SearchServiceApplication = Get-SPEnterpriseSearchServiceApplication -Identity $SearchServiceApplicationName -ErrorAction SilentlyContinue
  # Create the Search Service Application, If it doesn't exists!
  if(!$SearchServiceApplication)
  {
      $SearchServiceApplication = New-SPEnterpriseSearchServiceApplication -Name $SearchServiceApplicationName -ApplicationPool $SearchServiceAppPool -DatabaseServer $SearchDatabaseServer -DatabaseName $SearchServiceApplicationDatabase
      write-host "Created New Search Service Application" -ForegroundColor Green
  }
  
  #*** Step 4: Create Search Service Application Proxy ****
   #Get the Search Service Application Proxy
   $SearchServiceAppProxy = Get-SPEnterpriseSearchServiceApplicationProxy -Identity $SearchServiceApplicationProxyName -ErrorAction SilentlyContinue
   # Create the Proxy, If it doesn't exists!
  if(!$SearchServiceAppProxy)
  {
      $SearchServiceAppProxy = New-SPEnterpriseSearchServiceApplicationProxy -Name $SearchServiceApplicationProxyName -SearchApplication $SearchServiceApplication
      write-host "Created New Search Service Application Proxy" -ForegroundColor Green
  }
  
  #*** Step 5: Create New Search Topology
  $SearchServiceInstance = Get-SPEnterpriseSearchServiceInstance -Local
  #To Get Search Service Instance on Other Servers: use - $SearchServiceAppSrv1 = Get-SPEnterpriseSearchServiceInstance -Identity "S-SP-02"
  
  # Create New Search Topology
  $SearchTopology =  New-SPEnterpriseSearchTopology -SearchApplication $SearchServiceApplication
  
  #*** Step 6: Create Components of Search
  
  New-SPEnterpriseSearchContentProcessingComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
  
  New-SPEnterpriseSearchAnalyticsProcessingComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
  
  New-SPEnterpriseSearchCrawlComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
  
  New-SPEnterpriseSearchAdminComponent -SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
  
  #Prepare Index Location
  Remove-Item -Recurse -Force -LiteralPath $IndexLocation -ErrorAction SilentlyContinue
  MKDIR -Path $IndexLocation -Force
  
  #Create Index and Query Components
  New-SPEnterpriseSearchIndexComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance -RootDirectory $IndexLocation
  
  New-SPEnterpriseSearchQueryProcessingComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
  
  #*** Step 7: Activate the Toplogy for Search Service ***

  $SearchTopology.Activate() # Or Use: Set-SPEnterpriseSearchTopology -Identity $SearchTopology

 

Yeap, re-creating the Search was probably the last resort... I am glad you could get it running and thanks for sharing that to the community