Scheduler Health
Scheduler controls are available in System → Settings → Scheduler & Queue. This area shows the last heartbeat recorded by the Laravel scheduler. If the heartbeat is stale, queued tasks will not run.
Heartbeat detection uses a minimum 10-minute grace period to reduce false positives after startup.
- Healthy: scheduler heartbeat recorded within the configured window.
- Not detected: no recent heartbeat.
Long-Running Scheduler Worker
Busy hosts can run the scheduler as a supervised worker instead of depending on host cron timing:
php artisan scheduler:work
- The worker continuously checks due scheduled tasks using the app's scheduler wrapper.
- It records the same heartbeat used by System → Scheduler status.
- It releases expired scheduler locks and writes scheduler issue logs just like
scheduler:run. - Set
GWM_SCHEDULER_WORKER_SLEEP_SECONDSto control how often the worker checks for due tasks. The default is 60 seconds.
Run this command under Supervisor, systemd, Docker restart policy, or another process monitor. Cron remains supported for existing installations.
Octane Runtime
When Docker and Docker Compose are available, System → Scheduler includes an Octane Runtime panel. It can start, stop, and restart the app-managed Octane container through the bundled Docker Compose Octane profile.
- Octane uses FrankenPHP by default and listens on
OCTANE_PORT, default8000. GWM_OCTANE_HOSTcontrols the URL shown in the UI for the managed instance.- The normal Nginx/PHP-FPM path remains available; Octane is opt-in and managed from inside the app.
Application Self-Audit
Git Web Manager runs an internal Composer dependency self-audit via php artisan app:self-audit.
- This job audits the panel itself with Composer, not remote projects.
- It runs independently of the project audit toggle, so disabling remote audits does not disable panel self-audits.
- The latest self-audit status is stored in system settings for UI reporting and diagnostics.
Run Scheduler Now
Use the Run Scheduler Now button to trigger the scheduler immediately. This is helpful during onboarding or troubleshooting.
Process Queue Now
The Process Queue Now button runs the task queue processor once. Use it when you have queued items and the scheduler is offline.
Cron Installation
If you do not run scheduler:work, add the cron line shown in System Settings so the scheduler runs every minute:
* * * * * php /path/to/app/cron.php >> /path/to/storage/logs/scheduler-cron.log 2>&1
- The exact line (with your installation path) is displayed in System → Settings → Scheduler & Queue.
- The Install Cron button attempts to add or update this entry automatically on Linux hosts. On Windows, configure Task Scheduler instead.
- If you previously used the artisan-based cron line, running Install Cron will replace it automatically.
- If the heartbeat isn't updating, verify
storage/logs/scheduler-heartbeat.jsonis being written.
Scheduler Error Log
Scheduler issues are stored in storage/app/scheduler-errors.json as JSON entries. When the same error repeats, the entry increments an Error Count instead of duplicating the log.
License Verification Job
The scheduler runs license:verify every 10 minutes to re-validate Enterprise licensing with the external licensing API.
- If no license key is configured, the job exits cleanly.
- If verification fails, Enterprise-only features are disabled until the next successful verification.
- Manual verification is also available in System → Settings → Edition & License.