# Reconfigures the PW-DocserverWorker scheduled task for self-healing: # - restart up to 99x at 1-min intervals if the task action fails # - StartWhenAvailable (catch up if a trigger was missed) # - a repeating safety trigger every 5 min with MultipleInstances=IgnoreNew, # so if the worker process ever dies (crash, manual kill, missed boot # trigger) it relaunches within ~5 min instead of waiting for a reboot # - keeps AtStartup + SYSTEM/Highest (current working config) # Idempotent: safe to re-run. Run as Administrator. $ErrorActionPreference = 'Stop' $taskName = 'PW-DocserverWorker' $appDir = 'C:\docserver' $action = New-ScheduledTaskAction -Execute 'cmd.exe' ` -Argument "/c `"$appDir\start_worker.bat`"" -WorkingDirectory $appDir # Two triggers: at boot, and a repeating safety net every 5 minutes (indefinitely). $atStartup = New-ScheduledTaskTrigger -AtStartup $repeat = New-ScheduledTaskTrigger -Once -At (Get-Date) ` -RepetitionInterval (New-TimeSpan -Minutes 5) # Some Windows builds cap repetition without an explicit long duration; set ~10y. try { $repeat.Repetition.Duration = 'P3650D' } catch {} $settings = New-ScheduledTaskSettingsSet ` -ExecutionTimeLimit (New-TimeSpan -Hours 0) ` -RestartCount 99 ` -RestartInterval (New-TimeSpan -Minutes 1) ` -StartWhenAvailable ` -MultipleInstances IgnoreNew ` -AllowStartIfOnBatteries ` -DontStopIfGoingOnBatteries $principal = New-ScheduledTaskPrincipal -UserId 'SYSTEM' ` -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName $taskName -Action $action ` -Trigger @($atStartup, $repeat) -Settings $settings -Principal $principal ` -Description 'Performance West DOCX-to-PDF worker (MinIO + Word COM). Self-healing: restarts on failure + 5-min safety trigger.' ` -Force | Out-Null Write-Host "Reconfigured ${taskName}:" $ti = Get-ScheduledTask -TaskName $taskName $ti.Triggers | ForEach-Object { Write-Host (" trigger: " + $_.CimClass.CimClassName) } $s = $ti.Settings Write-Host (" RestartCount=" + $s.RestartCount + " RestartInterval=" + $s.RestartInterval + " StartWhenAvailable=" + $s.StartWhenAvailable + " MultipleInstances=" + $s.MultipleInstances) Write-Host (" State=" + $ti.State)