Skip to main content

NinjaOne Backup — Backup Won't Start / Stuck on "Backup Started"

Audience: T1 / T2 Use when: NinjaOne shows "backup started" with no progress, or the Lockhart backup service is stopped and backups are not running.

Lockhart is the internal codename for the NinjaOne Backup agent service. It runs completely separately from the main NinjaRMMAgent — a device can appear fully online in NinjaOne while Lockhart is stopped and no backups are running at all.


Step 1 — Check service status

Run this on the device to confirm both services:

Get-Service | Where-Object {
    $_.DisplayName -like "*NinjaRMM*" -or
    $_.DisplayName -like "*Lockhart*" -or
    $_.DisplayName -like "*NinjaOne Backup*"
} | Select DisplayName, Name, Status, StartType | Format-Table -AutoSize

Expected output on a healthy device:

DisplayName Status StartType
NinjaOne Agent Running Automatic
Lockhart Running Automatic

If Lockhart is Stopped — start it. If StartType is not Automatic — fix it (see Step 3).


Step 2 — Restart Lockhart

Restarting is the standard first step for most backup failures — it clears transient state issues:

Get-Service | Where-Object {$_.DisplayName -like "*Lockhart*"} | Restart-Service -PassThru
Get-Service | Where-Object {$_.DisplayName -like "*Lockhart*"} | Select DisplayName, Status

After restarting, go to NinjaOne → device → Backup → Run Backup Plan and watch the activity log.


Step 3 — Fix startup type

If Lockhart is set to Manual or Disabled, backups will be unreliable:

Set-Service -DisplayName "Lockhart" -StartupType Automatic
sc.exe config Lockhart start= auto

Get-Service | Where-Object {$_.DisplayName -like "*Lockhart*"} | Select DisplayName, StartType

Step 4 — "Backup started" with no progress

This is usually not a problem. NinjaOne does not show granular mid-job progress. "Backup started" simply means Lockhart is running the job.

Verify Lockhart is actually doing work:

Get-Process | Where-Object {$_.Name -like "*Lockhart*"} |
Select Name, CPU, @{N='MemMB';E={[math]::Round($_.WorkingSet/1MB,1)}}, Id | Format-Table

Get-Counter '\Process(lockhart*)\IO Data Bytes/sec' -SampleInterval 3 -MaxSamples 3
What you see What it means Action
CPU active, IO ~300+ MB/s Actively working — healthy Leave it. First full backups take 2–12+ hours.
CPU and IO near zero Genuinely stuck Restart Lockhart, trigger a fresh run.

Real-world example: CPU 13.81, RAM 997 MB, IO ~310–327 MB/s = Lockhart is healthy and actively pushing a large backup. No action needed.


Step 5 — Check the Lockhart log

If behavior is unclear, the log shows exactly what the job is doing:

Get-Content "C:\ProgramData\NinjaRMM\NinjaOneBackup\logs\lockhart.log" -Tail 50

Look for: is a job actively running, or is Lockhart looping/frozen with no activity?


Step 6 — If Lockhart won't start at all

Check whether the executable is still present:

$lockhart = Get-WmiObject Win32_Service | Where-Object {$_.DisplayName -like "*Lockhart*"}
$lockhart | Select Name, PathName, State, StartMode

if ($lockhart.PathName) {
    Test-Path ($lockhart.PathName -replace '"','')
}

If the path is missing or returns False: the agent needs reinstalling. Go to NinjaOne → device → Backup → Install Backup Agent, or escalate to NinjaOne support.


Step 7 — If it starts but stops again

Pull Windows Event Log entries for Lockhart errors:

Get-WinEvent -LogName Application -MaxEvents 100 |
Where-Object {$_.ProviderName -like "*Lockhart*" -or $_.Message -like "*Lockhart*"} |
Select TimeCreated, Id, LevelDisplayName, Message | Format-List

Escalate if

  • Lockhart is running, plan is assigned, but the backup never completes after 12+ hours and IO has dropped to zero
  • Lockhart restarts successfully but the same crash recurs — pull logs and open a ticket with NinjaOne support
  • Install Backup Agent button produces no activity and org-level backup is confirmed enabled