Troubleshooting
Inspect service status and logs on macOS
Section titled “Inspect service status and logs on macOS”Use these checks when elastic-fruit-runner is installed through Homebrew and running as a launchd service.
Service status
Section titled “Service status”Check whether Homebrew thinks the service is started:
brew services list | grep elastic-fruit-runnerCheck the actual launchd job:
launchctl list | grep elastic-fruit-runnerFor full launchd details, including the process ID, working directory, log paths, and environment:
launchctl print "gui/$(id -u)/homebrew.mxcl.elastic-fruit-runner"Check the running process directly:
ps aux | grep elastic-fruit-runner | grep -v grepThe Homebrew service writes stdout and stderr to:
/opt/homebrew/var/log/elastic-fruit-runner.logRead recent logs:
tail -n 200 /opt/homebrew/var/log/elastic-fruit-runner.logFollow logs while triggering a workflow:
tail -f /opt/homebrew/var/log/elastic-fruit-runner.logUseful filters:
grep '"runnerSet":"wonder-mesh-linux-arm64"' /opt/homebrew/var/log/elastic-fruit-runner.log | tail -n 80grep '"msg":"scale set ready"' /opt/homebrew/var/log/elastic-fruit-runner.log | tailgrep '"msg":"listening for jobs"' /opt/homebrew/var/log/elastic-fruit-runner.log | tailgrep '"msg":"start runner failed"' /opt/homebrew/var/log/elastic-fruit-runner.log | tailConfig file
Section titled “Config file”The default macOS config path is:
~/.elastic-fruit-runner/config.yamlOther search paths are:
/opt/homebrew/var/elastic-fruit-runner/config.yaml/usr/local/var/elastic-fruit-runner/config.yaml/etc/elastic-fruit-runner/config.yamlAfter changing config, restart the service:
brew services restart elastic-fruit-runnerThen confirm the new config took effect by checking for runner set startup messages:
grep '"msg":"authenticating with GitHub App"' /opt/homebrew/var/log/elastic-fruit-runner.log | tailgrep '"msg":"scale set ready"' /opt/homebrew/var/log/elastic-fruit-runner.log | tailDocker backend checks
Section titled “Docker backend checks”If the scale set is ready but a runner does not start, verify Docker under the same PATH used by launchd:
env PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/bin:/bin:/usr/sbin:/sbin docker versionTest pulling the runner image:
env PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/bin:/bin:/usr/sbin:/sbin docker pull --platform linux/arm64 ghcr.io/quipper/actions-runner:2.332.0If Docker reports docker-credential-osxkeychain is missing, check where the
credential helper is installed:
ls -l /opt/homebrew/bin/docker-credential-osxkeychainls -l /usr/local/bin/docker-credential-osxkeychainThe service PATH includes /opt/homebrew/bin, so the helper must be reachable
from that PATH when the daemon starts Docker.
Jobs stuck in “queued” after making a repository public
Section titled “Jobs stuck in “queued” after making a repository public”Symptom: Workflows that previously ran fine on self-hosted runners stop being picked up after converting a repository from private to public. Jobs stay in queued state indefinitely. No errors appear in the controller logs.
Cause: The organization’s runner group has allows_public_repositories set to false by default. When the repository was private, runners worked normally. After making it public, the runner group silently refuses to route jobs to the runners.
Fix: Enable public repository access on the runner group.
Via the GitHub UI:
- Go to Organization Settings > Actions > Runner groups
- Select the runner group (e.g. Default)
- Check Allow public repositories
Via the GitHub API:
gh api -X PATCH orgs/YOUR-ORG/actions/runner-groups/1 \ --input - <<< '{"allows_public_repositories": true}'