Background Jobs

Background Jobs

Keel includes a database-backed queue with jobs and failed_jobs tables.

Queue API

Queue::push(
    SendOrganizationInviteJob::class,
    ['to_email' => $email, 'subject' => 'Invite'],
    'default',
    0
);

Queue::push() writes to jobs with available_at using SQL DATE_ADD(NOW(), INTERVAL ... SECOND).

Worker CLI

# one drain pass (cron style)
php database/queue-work.php --once

# long-running worker
php database/queue-work.php
  • Script is CLI-only and loads env before processing.
  • Jobs are reserved with FOR UPDATE transaction locks.
  • Failures are retried with backoff; at 5 attempts they move to failed_jobs.

Deployment patterns

  1. Cron: run php database/queue-work.php --once every minute.
  2. Supervisor/systemd: keep php database/queue-work.php running continuously.