If one of Microsoft SharePoint Foundation Timer in Offline status when deploy will fail.


To check status use Powershell


Add-PSSnapin Microsoft.SharePoint.PowerShell

$servers = Get-SPServer | Where{$_.Role –ne "Invalid"}
foreach($server in $servers)
{
      $serverName = $server.DisplayName
      $serverRole = $server.Role
      Write-Host "$serverName - ROLE: $serverRole" -ForegroundColor "Black" -BackgroundColor "Yellow"
      $servicesRunning = $server.ServiceInstances | Where{$_.Status –eq "Online" –and $_.Hidden –eq $False}
      Write-Host "SharePoint Services Running:" -ForegroundColor "Blue" -BackgroundColor "White"
      $servicesRunning | Select TypeName
      Write-Host "`n"
}


If one of server does not contain Microsoft SharePoint Foundation Timer you should start it using Powershell

Add-PSSnapin Microsoft.SharePoint.PowerShell

$farm  = Get-SPFarm 
$disabledTimers = $farm.TimerService.Instances | where {$_.Status -ne "Online"} 
if ($disabledTimers -ne $null) 
{ 
    foreach ($timer in $disabledTimers) 
    { 
        Write-Host "Timer service instance on server " $timer.Server.Name " is not Online. Current status:" $timer.Status 
        Write-Host "Attempting to set the status of the service instance to online" 
        $timer.Provision()
        $timer.Start() 
        Write-Host -ForegroundColor Red "You MUST now go restart the SharePoint timer service on server " $timer.Server.Name
    } 
} 
else 
{ 
    Write-Host "All Timer Service Instances in the farm are online! No problems found" 
}


Note: You MUST now go restart the SharePoint timer service on each server where problem found.