Skip to content

Troubleshooting ​

A consolidated list of issues covered in more depth on their feature pages, gathered here for quick lookup.

Access and authentication ​

SymptomCauseFix
Guest gets HTTP 500 visiting the consoleLaravel's auth middleware alias was added to route.middleware, and it called route('login') on a host with no such routeRemove auth from route.middleware; let AuthorizeOpConsole handle the guest check — see Authentication & Authorization
Everyone gets 403 in productionNo viewOpConsole/runOpConsoleActions Gate defined — the fail-closed default only allows localDefine the Gates in AppServiceProvider::boot()
A specific custom Gate name never passes, even in localCustom Gate names (anything other than the defaults) never get the automatic local fallbackDefine that exact Gate name explicitly
Guest redirect loops or 401 instead of redirectauthentication.login_route is null, missing, or requires parametersExpected behavior — point it at a valid, parameterless named route, or accept the 401

Operations ​

SymptomCauseFix
An action card is disabled with a runtime explanationWeb SAPI lacks pcntlRun the equivalent php artisan command from the CLI, or enable pcntl for the web SAPI — see Execution environments
Action refused inside Swoole, "would interrupt the worker"Octane on Swoole blocks SIGALRM-based timed actions by defaultRun from CLI, or set OPCONSOLE_OCTANE_ALLOW_ACTIONS=true if you accept the risk
"Another operation is already running" persistsA lock hasn't expired, or a prior process was killed before releasing itWait for the lease to expire, or investigate a stuck process if it recurs
Actions fail immediately with a lock errorThe configured lock store failed validation (missing, unsafe, or shares storage with cache.default)Fix concurrency.lock_store — see Permissions & Security Policies
An action is missing from the UIDisabled in config('opconsole.actions'), or (for octane_reload) Octane isn't installedCheck the config key

Health checks ​

SymptomCauseFix
Heartbeat checks stuck at unknownScheduler/worker not actually running, or heartbeats.store isn't shared across serversConfirm cron and queue:work are running; use a shared cache store
opconsole:health fails CI unexpectedly--fail-on defaults to criticalPass --fail-on=warning only if warnings should fail the build
Health endpoint returns 404health_endpoint.enabled is false, or no token is setSet both OPCONSOLE_HEALTH_ENDPOINT=true and OPCONSOLE_HEALTH_TOKEN
Health endpoint returns 401Missing or incorrect bearer tokenSend Authorization: Bearer <token> matching OPCONSOLE_HEALTH_TOKEN exactly

Security audit ​

SymptomCauseFix
Security tab shows "unverified"No scan has run yetRun php artisan opconsole:security, or press Run security scan
Report marked "stale"Older than security.max_age_seconds, or composer.json/composer.lock changed since the last scanRun the scan again
Scan fails immediatelyComposer missing, too old (needs 2.4+), or composer.lock missing/malformedVerify security.composer points at a valid Composer 2.4+ executable

Logs ​

SymptomCauseFix
No log files listedlogs.path doesn't exist, isn't readable, or filenames don't match ^[\w.-]+\.log$Verify the path and filenames
Download/delete buttons missinglogs.allow_download/logs.allow_delete is false, or missing the relevant GateCheck config and Gates
Can't delete the active log fileThe newest valid log file (or a symlink resolving to it) can never be deleted — by designNot a bug; rotate logs externally if you need to remove the active file

After an upgrade ​

SymptomCauseFix
Dashboard styling looks brokenPublished assets are stale, or a customized view wasn't merged with upstream changesphp artisan vendor:publish --tag=opconsole-assets --force; diff customized views against the package — see Upgrade Guide
New tab or section missing after updatingPublished views weren't updatedRe-publish or merge resources/views/vendor/opconsole

If an issue isn't listed here, check the FAQ, the relevant feature page, or open an issue on GitHub.

Released under the MIT License.