Repository navigation
Ephemeral Runners seem to get stuck when job is canceled or interrupted #4307
Description
Checks
- I've already read https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/troubleshooting-actions-runner-controller-errors and I'm sure my issue is not covered in the troubleshooting guide.
- I am using charts that are officially provided
Controller Version
0.13.0
Deployment Method
Helm
Checks
- This isn't a question or user support case (For Q&A and community support, go to Discussions).
- I've read the Changelog before submitting this issue and I'm sure it's not due to any recently-introduced backward-incompatible changes
To Reproduce
Unsure of reproduction, seems to be intermittent, happens at random.Describe the bug
We've been noticing issues with runners randomly getting stuck and prevents workflows from running. Im unsure on a root cause but it seems that the longest running runners have this error:
[RUNNER 2025-11-07 14:43:16Z INFO Runner] Skipping message Job. Job message not found 'e420db7b-c780-5ae4-8145-4eea09b87aea'. job was canceled
Best i can tell, this seems to be hanging and doesnt get cleaned up. I assume the job was interrupted or manually canceled by the controller or a user. We can get runners rolling again when we delete any ephemeralrunners that have this in their logs.
However it is unclear to us if this causes another issue we are seeing at the same time but it seems some pods have the following error but may just be a result of deleting the ephemeralrunners as mentioned above:
[RUNNER 2025-11-07 14:43:07Z INFO GitHubActionsService] AAD Correlation ID for this token request: Unknown
[RUNNER 2025-11-07 14:43:22Z WARN GitHubActionsService] Attempt 1 of POST request to https://run-actions-1-azure-eastus.actions.githubusercontent.com/119/acquirejob failed (HTTP Status: GatewayTimeout). The operation will be retried in 11.082 seconds.
[RUNNER 2025-11-07 14:43:38Z ERR GitHubActionsService] POST request to https://run-actions-1-azure-eastus.actions.githubusercontent.com/119/acquirejob failed. HTTP Status: Conflict
[RUNNER 2025-11-07 14:43:38Z INFO Runner] Skipping message Job. Job message already acquired '269c5bb1-9d88-5672-9f70-5522ca917969'. job assignment is invalid: MissingKey
[RUNNER 2025-11-07 15:33:40Z INFO RSAFileKeyManager] Loading RSA key parameters from file /home/runner/.credentials_rsaparams
[RUNNER 2025-11-07 15:33:40Z ERR GitHubActionsService] POST request to https://pipelinesghubeus25.actions.githubusercontent.com/<token>/_apis/oauth2/token failed. HTTP Status: BadRequest
[RUNNER 2025-11-07 15:33:40Z INFO GitHubActionsService] AAD Correlation ID for this token request: Unknown
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] Catch exception during request
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] GitHub.Services.OAuth.VssOAuthTokenRequestException: Registration 470d6c87-f8c4-411f-87d0-6b069233ccc7 was not found.
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at GitHub.Services.OAuth.VssOAuthTokenProvider.OnGetTokenAsync(IssuedToken failedToken, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at GitHub.Services.Common.IssuedTokenProvider.GetTokenOperation.GetTokenAsync(VssTraceActivity traceActivity)
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at GitHub.Services.Common.IssuedTokenProvider.GetTokenAsync(IssuedToken failedToken, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at GitHub.Services.Common.RawHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at GitHub.Services.Common.VssHttpRetryMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at Sdk.WebApi.WebApi.RawHttpClientBase.SendAsync(HttpRequestMessage message, HttpCompletionOption completionOption, Object userState, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at Sdk.WebApi.WebApi.RawHttpClientBase.SendAsync[T](HttpRequestMessage message, Boolean readErrorBody, Object userState, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at Sdk.WebApi.WebApi.RawHttpClientBase.SendAsync[T](HttpMethod method, IEnumerable`1 additionalHeaders, Uri requestUri, HttpContent content, IEnumerable`1 queryParameters, Boolean readErrorBody, Object userState, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at GitHub.Actions.RunService.WebApi.BrokerHttpClient.GetRunnerMessageAsync(Nullable`1 sessionId, String runnerVersion, Nullable`1 status, String os, String architecture, Nullable`1 disableUpdate, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at GitHub.Runner.Common.BrokerServer.<>c__DisplayClass7_0.<<GetRunnerMessageAsync>b__0>d.MoveNext()
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] --- End of stack trace from previous location ---
[RUNNER 2025-11-07 15:33:40Z ERR BrokerServer] at GitHub.Runner.Common.RunnerService.RetryRequest[T](Func`1 func, CancellationToken cancellationToken, Int32 maxAttempts, Func`2 shouldRetry)
[RUNNER 2025-11-07 15:33:40Z WARN BrokerServer] Back off 6.292 seconds before next retry. 4 attempt left.
[RUNNER 2025-11-07 15:33:46Z INFO RSAFileKeyManager] Loading RSA key parameters from file /home/runner/.credentials_rsaparams
[RUNNER 2025-11-07 15:33:46Z ERR GitHubActionsService] POST request to https://pipelinesghubeus25.actions.githubusercontent.com/<token>/_apis/oauth2/token failed. HTTP Status: BadRequest
[RUNNER 2025-11-07 15:33:46Z INFO GitHubActionsService] AAD Correlation ID for this token request: Unknown
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] Catch exception during request
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] GitHub.Services.OAuth.VssOAuthTokenRequestException: Registration 470d6c87-f8c4-411f-87d0-6b069233ccc7 was not found.
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at GitHub.Services.OAuth.VssOAuthTokenProvider.OnGetTokenAsync(IssuedToken failedToken, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at GitHub.Services.Common.IssuedTokenProvider.GetTokenOperation.GetTokenAsync(VssTraceActivity traceActivity)
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at GitHub.Services.Common.IssuedTokenProvider.GetTokenAsync(IssuedToken failedToken, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at GitHub.Services.Common.RawHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at GitHub.Services.Common.VssHttpRetryMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at Sdk.WebApi.WebApi.RawHttpClientBase.SendAsync(HttpRequestMessage message, HttpCompletionOption completionOption, Object userState, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at Sdk.WebApi.WebApi.RawHttpClientBase.SendAsync[T](HttpRequestMessage message, Boolean readErrorBody, Object userState, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at Sdk.WebApi.WebApi.RawHttpClientBase.SendAsync[T](HttpMethod method, IEnumerable`1 additionalHeaders, Uri requestUri, HttpContent content, IEnumerable`1 queryParameters, Boolean readErrorBody, Object userState, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at GitHub.Actions.RunService.WebApi.BrokerHttpClient.GetRunnerMessageAsync(Nullable`1 sessionId, String runnerVersion, Nullable`1 status, String os, String architecture, Nullable`1 disableUpdate, CancellationToken cancellationToken)
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at GitHub.Runner.Common.BrokerServer.<>c__DisplayClass7_0.<<GetRunnerMessageAsync>b__0>d.MoveNext()
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] --- End of stack trace from previous location ---
[RUNNER 2025-11-07 15:33:46Z ERR BrokerServer] at GitHub.Runner.Common.RunnerService.RetryRequest[T](Func`1 func, CancellationToken cancellationToken, Int32 maxAttempts, Func`2 shouldRetry)
[RUNNER 2025-11-07 15:33:46Z WARN BrokerServer] Back off 11.706 seconds before next retry. 3 attempt left.
Right now we are getting around this issue by using a cron that cleans up the following:
resources="$(kubectl get ephemeralrunner --namespace "$NS" -l app.kubernetes.io/component=runner -o yaml | yq -r '.items[] | .metadata.name')"
echo "$resources" | while IFS= read -r resource; do
if [ -z "$resource" ]; then continue; fi
echo "Checking resource: $resource"
logs=$(kubectl -n "$NS" logs "$resource" 2>/dev/null)
if echo "$logs" | grep -qE "MissingKey|job was canceled|token request: Unknown"; then
echo "Deleting resource: $resource"
kubectl -n "$NS" delete ephemeralrunner $resource
fi
done
Describe the expected behavior
Runners should handle this and clean themselves up.
Additional Context
No values that i believe are relevantController Logs
https://gist.github.com/surgiie/ef34874c8942ac965f2d514ff8277b53Runner Pod Logs
Waiting for docker to be ready.
Docker is ready.
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] No proxy settings were found based on environmental variables (http_proxy/https_proxy/HTTP_PROXY/HTTPS_PROXY)
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known config file 'Credentials': '/home/runner/.credentials'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known config file 'Runner': '/home/runner/.runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Adding extra user agent 'actions-runner-controller/0.13.0' to all HTTP requests.
[RUNNER 2025-11-07 14:43:14Z INFO Listener] Runner is built for Linux (X64) - linux-x64.
[RUNNER 2025-11-07 14:43:14Z INFO Listener] RuntimeInformation: Ubuntu 22.04.5 LTS.
[RUNNER 2025-11-07 14:43:14Z INFO Listener] Version: 2.329.0
[RUNNER 2025-11-07 14:43:14Z INFO Listener] Commit: c76c59996c8fa32e989164a5a695efb12608ae5a
[RUNNER 2025-11-07 14:43:14Z INFO Listener] Culture:
[RUNNER 2025-11-07 14:43:14Z INFO Listener] UI Culture:
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO Listener] Validating directory permissions for: '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO CommandLineParser] Parse
[RUNNER 2025-11-07 14:43:14Z INFO CommandLineParser] Parsing 1 args
[RUNNER 2025-11-07 14:43:14Z INFO CommandLineParser] parsing argument
[RUNNER 2025-11-07 14:43:14Z INFO CommandLineParser] HasArgs: False
[RUNNER 2025-11-07 14:43:14Z INFO CommandLineParser] Adding Command: run
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Removing env var: 'ACTIONS_RUNNER_INPUT_JITCONFIG'
[RUNNER 2025-11-07 14:43:14Z INFO Listener] Arguments parsed
[RUNNER 2025-11-07 14:43:14Z INFO Runner] ExecuteCommand
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] currentAssemblyLocation: /home/runner/bin/Runner.Listener.dll
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] binPath: /home/runner/bin
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] RootFolder: /home/runner
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known config file 'Runner': '/home/runner/.runner'
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] ConfigFilePath: /home/runner/.runner
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known config file 'MigratedRunner': '/home/runner/.runner_migrated'
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] MigratedConfigFilePath: /home/runner/.runner_migrated
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known config file 'Credentials': '/home/runner/.credentials'
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] CredFilePath: /home/runner/.credentials
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known config file 'MigratedCredentials': '/home/runner/.credentials_migrated'
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] MigratedCredFilePath: /home/runner/.credentials_migrated
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known config file 'Service': '/home/runner/.service'
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] ServiceConfigFilePath: /home/runner/.service
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Flag 'help': 'False'
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Flag 'version': 'False'
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Flag 'commit': 'False'
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Flag 'check': 'False'
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Command 'configure': 'False'
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Command 'remove': 'False'
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Command 'warmup': 'False'
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Env arg 'jitconfig': '***'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO Runner] Saved 426 bytes to '/home/runner/.runner'.
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO Runner] Saved 225 bytes to '/home/runner/.credentials'.
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO Runner] Saved 1631 bytes to '/home/runner/.credentials_rsaparams'.
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] No proxy settings were found based on environmental variables (http_proxy/https_proxy/HTTP_PROXY/HTTPS_PROXY)
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known config file 'Credentials': '/home/runner/.credentials'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known config file 'Runner': '/home/runner/.runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Adding extra user agent 'actions-runner-controller/0.13.0' to all HTTP requests.
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationManager] LoadSettings
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] IsConfigured()
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] IsConfigured: True
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationManager] Is configured: True
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] Read setting file: 426 chars
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationManager] Settings Loaded
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] IsServiceConfigured()
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] IsServiceConfigured: False
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Command 'run': 'True'
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] IsConfigured()
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] IsConfigured: True
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationManager] Is configured: True
[RUNNER 2025-11-07 14:43:14Z INFO Runner] Could not parse the argument value '' for StartupType. Defaulting to Manual
[RUNNER 2025-11-07 14:43:14Z INFO Runner] Set runner startup type - Manual
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Flag 'once': 'False'
[RUNNER 2025-11-07 14:43:14Z INFO CommandSettings] Flag 'once': 'False'
[RUNNER 2025-11-07 14:43:14Z INFO Runner] RunAsync
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationManager] LoadMigratedSettings
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] IsMigratedConfigured()
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] IsMigratedConfigured: False
[RUNNER 2025-11-07 14:43:14Z INFO Runner] Failed to load migrated settings: No migrated configuration found.
[RUNNER 2025-11-07 14:43:14Z INFO Runner] Falling back to original .runner settings
[RUNNER 2025-11-07 14:43:14Z INFO Runner] Using BrokerMessageListener
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] Using provided settings
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] {
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] "AgentId": 731233,
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] "AgentName": "rr-runner-prod-s8pj5-runner-4sgcl",
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] "PoolId": 1,
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] "DisableUpdate": true,
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] "Ephemeral": true,
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] "ServerUrl": "https://pipelinesghubeus25.actions.githubusercontent.com/ZIz4WCgNC1Nnx7QQ74CWOxb0bFEkMdgYcZAOAAJCIPID0UzwsS/",
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] "WorkFolder": "_work",
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] "UseV2Flow": true,
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] "ServerUrlV2": "https://broker.actions.githubusercontent.com/"
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] }
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] Loading Credentials
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] HasCredentials()
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] stored True
[RUNNER 2025-11-07 14:43:14Z INFO CredentialManager] GetCredentialProvider
[RUNNER 2025-11-07 14:43:14Z INFO CredentialManager] Creating type OAuth
[RUNNER 2025-11-07 14:43:14Z INFO CredentialManager] Creating credential type: OAuth
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Bin': '/home/runner/bin'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known directory 'Root': '/home/runner'
[RUNNER 2025-11-07 14:43:14Z INFO HostContext] Well known config file 'RSACredentials': '/home/runner/.credentials_rsaparams'
[RUNNER 2025-11-07 14:43:14Z INFO RSAFileKeyManager] Loading RSA key parameters from file /home/runner/.credentials_rsaparams
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] Attempt to create session.
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] Connecting to the Broker Server...
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] HasCredentials()
[RUNNER 2025-11-07 14:43:14Z INFO ConfigurationStore] stored True
[RUNNER 2025-11-07 14:43:14Z INFO CredentialManager] GetCredentialProvider
[RUNNER 2025-11-07 14:43:14Z INFO CredentialManager] Creating type OAuth
[RUNNER 2025-11-07 14:43:14Z INFO CredentialManager] Creating credential type: OAuth
[RUNNER 2025-11-07 14:43:14Z INFO RSAFileKeyManager] Loading RSA key parameters from file /home/runner/.credentials_rsaparams
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] VssConnection created
[RUNNER 2025-11-07 14:43:14Z INFO BrokerMessageListener] Connecting to the Runner server...
[RUNNER 2025-11-07 14:43:14Z INFO RunnerServer] EstablishVssConnection
[RUNNER 2025-11-07 14:43:14Z INFO RunnerServer] Establish connection with 100 seconds timeout.
[RUNNER 2025-11-07 14:43:14Z INFO GitHubActionsService] Starting operation Location.GetConnectionData
[RUNNER 2025-11-07 14:43:14Z INFO RunnerServer] EstablishVssConnection
[RUNNER 2025-11-07 14:43:14Z INFO RunnerServer] Establish connection with 60 seconds timeout.
[RUNNER 2025-11-07 14:43:14Z INFO GitHubActionsService] Starting operation Location.GetConnectionData
[RUNNER 2025-11-07 14:43:14Z INFO RunnerServer] EstablishVssConnection
[RUNNER 2025-11-07 14:43:14Z INFO RunnerServer] Establish connection with 60 seconds timeout.
[RUNNER 2025-11-07 14:43:14Z INFO GitHubActionsService] Starting operation Location.GetConnectionData
[RUNNER 2025-11-07 14:43:15Z INFO GitHubActionsService] Finished operation Location.GetConnectionData
[RUNNER 2025-11-07 14:43:15Z INFO GitHubActionsService] Finished operation Location.GetConnectionData
[RUNNER 2025-11-07 14:43:15Z INFO GitHubActionsService] Finished operation Location.GetConnectionData
[RUNNER 2025-11-07 14:43:16Z INFO BrokerMessageListener] VssConnection created
[RUNNER 2025-11-07 14:43:16Z INFO Terminal] WRITE LINE:
√ Connected to GitHub
[RUNNER 2025-11-07 14:43:16Z INFO Terminal] WRITE LINE:
[RUNNER 2025-11-07 14:43:16Z INFO RSAFileKeyManager] Loading RSA key parameters from file /home/runner/.credentials_rsaparams
[RUNNER 2025-11-07 14:43:16Z INFO RSAFileKeyManager] Loading RSA key parameters from file /home/runner/.credentials_rsaparams
[RUNNER 2025-11-07 14:43:16Z INFO GitHubActionsService] AAD Correlation ID for this token request: Unknown
[RUNNER 2025-11-07 14:43:16Z INFO BrokerMessageListener] Session created.
[RUNNER 2025-11-07 14:43:16Z INFO Terminal] WRITE LINE: Current runner version: '2.329.0'
Current runner version: '2.329.0'
[RUNNER 2025-11-07 14:43:16Z INFO Terminal] WRITE LINE: 2025-11-07 14:43:16Z: Listening for Jobs
2025-11-07 14:43:16Z: Listening for Jobs
[RUNNER 2025-11-07 14:43:16Z INFO JobDispatcher] Set runner/worker IPC timeout to 30 seconds.
[RUNNER 2025-11-07 14:43:16Z INFO ConfigurationStore] HasCredentials()
[RUNNER 2025-11-07 14:43:16Z INFO ConfigurationStore] stored True
[RUNNER 2025-11-07 14:43:16Z INFO CredentialManager] GetCredentialProvider
[RUNNER 2025-11-07 14:43:16Z INFO CredentialManager] Creating type OAuth
[RUNNER 2025-11-07 14:43:16Z INFO CredentialManager] Creating credential type: OAuth
[RUNNER 2025-11-07 14:43:16Z INFO RSAFileKeyManager] Loading RSA key parameters from file /home/runner/.credentials_rsaparams
[RUNNER 2025-11-07 14:43:16Z INFO RSAFileKeyManager] Loading RSA key parameters from file /home/runner/.credentials_rsaparams
[RUNNER 2025-11-07 14:43:16Z INFO RSAFileKeyManager] Loading RSA key parameters from file /home/runner/.credentials_rsaparams
[RUNNER 2025-11-07 14:43:16Z INFO GitHubActionsService] AAD Correlation ID for this token request: Unknown
[RUNNER 2025-11-07 14:43:16Z ERR GitHubActionsService] POST request to https://run-actions-3-azure-eastus.actions.githubusercontent.com/64/acquirejob failed. HTTP Status: NotFound
[RUNNER 2025-11-07 14:43:16Z INFO Runner] Skipping message Job. Job message not found 'e420db7b-c780-5ae4-8145-4eea09b87aea'. job was canceled
Activity
github-actions commentedon Nov 7, 2025
Hello! Thank you for filing an issue.
The maintainers will triage your issue shortly.
In the meantime, please take a look at the troubleshooting guide for bug reports.
If this is a feature request, please review our contribution guidelines.
badstreff commentedon Nov 8, 2025
If you do a
kubectl get ephemeralrunnersdo you see a lot of them sitting in a failed state? I have PR - #4272 that may also resolve the issue you see here but has not been getting much traction.surgiie commentedon Nov 9, 2025
@badstreff No not really, thats what i find odd about this issue. It seems to happen at random but as far as i can tell inspecting the runners only shows a lot of runners with no status on them and then just the ones in "Running" state that show logs as described above.
patrickvinograd commentedon Nov 10, 2025
As a datapoint, one way we've consistently been able to trigger this is if the CI workflow being run OOMs.
alexgaganashvili commentedon Nov 11, 2025
Just ran into the same problem. Can't cancel a workflow. An EphemeralRunner is showing Running.
surgiie commentedon Nov 12, 2025
Interesting, i will look for OOM failures next time i notice this issue. Like i said, for us it doesnt happen everyday and it seems to happen at random. That said, the runner should be able to clean this up. Hoping the arc team fixes this soon but im getting away with the cronjob i posted above that helps mitigate the issue when it does happen.
genisd commentedon Nov 19, 2025
OOM is definitely not he only cause. We don't have OOMs at all on our runner and we get this as well.
Infact we have cronjobs which cleanup ephemeral runners which pretty much match:
.*Skipping message Job\..*. (in reality we exactly match the log messages which we know of).this is the exact regex:
this regex covers like multiple scenarios
The fact that this particular job fails isn't even the issue imho, but it reserves a slot which is considered "available" but not picking up another job from the queue yielding in starvation :(. That goes for all of these scenarios above
here a gist with all our "cleaners".
https://gist.github.com/genisd/54fddf27cbe1bb875ef49412833612c1
i really need to invest more time into these to be able to get rid of them ;-)
i trust that with these cleaners (use at your own risk) you will find this (these) particular issue(s) disappearing
surgiie commentedon Nov 19, 2025
Thanks for sharing, may update our cron to cover more areas.
nikola-jokic commentedon Dec 5, 2025
Hey, could anyone please provide
-o yamlof the pod that gets stuck like this? I'd love to understand the state in which the pod is in to see why/how are we not handling this scenario properly.anttijman commentedon Dec 9, 2025
Sorry about the offtopic but @surgiie are you using the
ACTIONS_RUNNER_PRINT_LOG_TO_STDOUTfor streaming the runner logs to stdout? Ephemeral runners in my setup are streaming only the log lines without the prefixes to stdout.surgiie commentedon Dec 9, 2025
Yes. I have this set to 1.
surgiie commentedon Dec 9, 2025
I will try to do this soon. Im on holiday break soon so if someone is able to produce logs before that would be great otherwise, ill try to circle back to this soon.
2 remaining items
atyu1 commentedon Jan 5, 2026
Same issue happened for us 4 days back, we have a runner on version 2.330.0 , the job failed after 44min and 6s with the same stack trace.
Interesting that at the beginning I have another stack trace:
Thanks!
genisd commentedon Jan 5, 2026
from today's harvest, 2 failure scenarios.
please note we're still on 0.12.1
gh runner pod tag we use is :latest
registration was not found:
pod yaml: https://gist.github.com/genisd/bb028c473b6d83ce1bb506fe796ca16e
logs: https://gist.github.com/genisd/9fd46e604ee5cd02b93cb55220c01628
job already acquired:
pod yaml: https://gist.github.com/genisd/59fdd30abffe2ebc51c8ff2467873df0
logs: https://gist.github.com/genisd/25ccbfea99f68d06ed6db436b8121c82
denysvitali-kaiko commentedon Jan 7, 2026
Happens to us as well, and it seems similar to actions/runner#3904, actions/runner#3857, and #3953 (comment)
For reference, we keep on seeing backend errors such as:
margeauxg-medium commentedon Jan 22, 2026
I have a similar issue. Full pod logs are included here - actions/runner#4191
surgiie commentedon Jan 23, 2026
Yeah as mentioned, we see this too. Im seeing several job related errors like: "MissingKey", "Job was canceled" , etc and its hard to know if they are all correlated or which one is the root cause to the runners getting stuck. This is why we grep and include all of these in our cron job that deletes them.
kornelkalnai commentedon Feb 23, 2026
I am currently using this workaround, and it seems to be working great.
ofirmakmal commentedon Apr 15, 2026
Confirming this happens on v0.14.0 / runner v2.333.1 with a different trigger: ARC listener restart
We hit this today and want to contribute a new triggering scenario and a subtle symptom that isn't in the thread yet.
Trigger: A helm chart update (we modified
gha-runner-scale-setvalues and re-applied) caused theAutoscalingListenerpod to be recreated. EphemeralRunners that existed prior to the restart kept running but their OAuth registrations were invalidated server-side. They then spammed this pattern indefinitely:So the trigger isn't always a canceled/interrupted job — any listener restart (helm upgrade, pod eviction, node consolidation) can leave already-created EphemeralRunners holding stale tokens.
Subtle symptom: The
EphemeralRunnerCRD's.statusand the pod's.status.phaseboth reportRunning. Nothing in the Kubernetes view indicates a problem — only the runner container's stdout shows the auth loop. This makes the failure mode invisible to standard health checks and dashboards. A pod can sit inRunningfor hours while its runner process is a zombie.Downstream impact: When a real job arrives, the listener routes it to one of these zombies (GitHub sees them as valid runners), the zombie can't claim it, and the job hangs at "Waiting for a runner to pick up this job…" until someone manually `kubectl delete ephemeralrunner …`.
Suggested fix at the controller level: When the
AutoscalingListenerrestarts and re-registers with GitHub, the controller should reconcile existing EphemeralRunners — either re-issue registrations or mark them for replacement. Right now the controller treats them as healthy because their pods areRunning.In the meantime, @kornelkalnai's livenessProbe workaround upthread works well; we're adopting it. Consolidated list of known error signatures to catch (from this incident and earlier posts):
Environment:
JWhitleyWork commentedon Apr 23, 2026
I am seeing this issue as well but I got some stuck runners even with the work-around. Claude tells me that this is because some instances were being stopped and then restarted, which would clear their logs and keep the liveliness check from being effective. However, since I am using scale-to-zero and a new runner (at least in my cluster) almost always picks up a job immediately after being spawned, the system uptime is a good measure of how long the runner has been awake and can be compared against the job logs to determine if a job has been picked up within a reasonable time of being spawned. As such, Claude added the following check to my setting YAMLs:
USBAkimbo commentedon Apr 27, 2026
The liveness probe from @kornelkalnai seems to do the trick
My
arc-runnersvalues.yml looks like this now in my AKS cluster (deployed with ArgoCD ApplicationSets)There's 1 more problem though - if I ever edit the spec to change image or whatever ArgoCD syncs it and a new EphemeralRunnerSet gets created but the AutoscalingListener isn't reconciled automatically
So I currently have to
kubectl -n arc-controller delete autoscalinglistener aks-agents-*-listenerafter spec changesThis same issue happens in 0.13.1 as well
EDIT: Found a fix for the listener refresh by deploying this - just runs as an ArgoCD post-sync hook
With all of this, my ARC runners now work, though sadly I can't have 1 standby agent online at all times (which I can live without)
jingles commentedon May 21, 2026
@nikola-jokic wondering if this got lost in the holiday shuffle, the logs were posted as you requested, but issue remains open. additional help in the actual code base (if appropriate) would be much appreciated!
pauldraper commentedon Jul 7, 2026
Hit this today on controller 0.13.1 / runner 2.334.0, org-level scale sets on EKS.
Data points that might help triage:
acquirejob, loggedSkipping message Job. Job message not found '...'. job was canceled, and then sat "Listening for Jobs" indefinitely — one for 18+ hours. NoRunner.Workerprocess in any of them.concurrencygroups canceling queued runs after assignment but before acquire.Calculated target runner count {"assigned job": 49, "decision": 49, "currentRunnerCount": 49}so it won't scale up, while its own stats show only 26 registered / 24 busy at GitHub. The gap betweencurrentRunnerCountandtotalRegisteredRunnersis exactly the stuck runners, and queued jobs wait even though the scale set is far below max.status.jobDisplayNamepatched. Deleting those CRs recovered everything within a minute.Stopgap we're using until there's a fix — reap by that fingerprint, no log scraping needed:
The age cutoff avoids reaping runners that are still starting up.
brtkwr commentedon Jul 23, 2026
For anyone tracking this: actions/runner#4312 was closed as completed on 2026-07-15, but we hit this exact hang on runner v2.336.0 (about six hours after rolling it out), so the v2.336.0 cancellation fixes do not fully cover it. Filed actions/runner#4569 with the timeline and log signature. Interim mitigation that works for us:
activeDeadlineSeconds: 21600on the runner pod template (6h, matching the default jobtimeout-minutes, so it can never kill a legitimate job) so the kubelet reaps zombies and ARC replaces them.antoinedeschenes commentedon Jul 23, 2026
On our side we mostly solved controller stalls by cutting down the scaleset client timeout #4473
Force-remove EphemeralRunner registration finalizer after deletion ti…
Force-remove EphemeralRunner registration finalizer after deletion ti…