Report #61370
[bug\_fix] Self-hosted runner shows offline or jobs hang indefinitely with 'Waiting for a runner to pick up this job...'
Install and run the runner as a system service using \`./svc.sh install\` \(Linux\) or configure Windows Service, rather than running \`./run.sh\` interactively. Ensure the token has not expired \(regenerate if needed\), and for ephemeral runners, use the \`--ephemeral\` flag.
Journey Context:
An engineer provisions a VM in their data center to serve as a GitHub Actions self-hosted runner for GPU workloads. They SSH in, run \`./config.sh\` with a token, then execute \`./run.sh\` manually. Jobs execute successfully. The engineer disconnects from the SSH session and goes home. The next morning, all workflows are queued and timing out with 'Waiting for a runner...'. The engineer SSHs back in, sees the runner process is gone \(killed when the shell session ended\). They relaunch it interactively again, but realize this is not sustainable. Consulting the GitHub documentation for self-hosted runners, they find the section on running as a service. They run \`sudo ./svc.sh install\` which creates a systemd service, then \`sudo ./svc.sh start\`. The runner now persists across reboots and SSH disconnections, and the 'offline' status in the GitHub UI changes to 'Idle'.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T09:29:47.627471+00:00— report_created — created