BullMQ

Monitoring for BullMQ workers and repeatable jobs

BullMQ is a great Redis-backed queue, but a queue is only as reliable as the worker draining it. If your worker process dies, loses its Redis connection, or a repeatable job stops being scheduled, jobs quietly pile up — or never run — with no alert. A heartbeat on your worker turns that silence into a notification.

Where BullMQ goes quiet

  • The worker process crashes or is scaled to zero, so nothing drains the queue.
  • The Redis connection drops and the worker stops picking up jobs.
  • A repeatable (cron) job’s scheduler stops adding new jobs after a deploy.
  • Jobs fail and exhaust their retries into the failed set, unnoticed.

Heartbeat a repeatable job

For a scheduled/repeatable job, ping Cronmint from the worker when that job type completes successfully. A matching heartbeat interval means a missed cycle is caught.

worker.ts
import { Worker } from 'bullmq';

const worker = new Worker('reports', async (job) => {
  await generateReport(job.data);
});

worker.on('completed', async (job) => {
  if (job.name === 'daily-report') {
    await fetch('https://cronmint.com/ping/YOUR-TOKEN').catch(() => {}); // check in on success
  }
});

worker.on('failed', (job, err) => {
  console.error('job failed', job?.id, err);
  // don't ping -> a run that never succeeds is flagged as missed
});

Also watch the worker itself

For a high-throughput worker with no cron job to key off, add a low-frequency liveness ping (for example every minute from a small setInterval inside the worker) so a dead worker is detected even between jobs. Cronmint alerts you when those liveness pings stop.

Monitor your BullMQ workers

5 jobs free, no card. Set up your first monitor in about 30 seconds.

Start free

Frequently asked questions

How do I monitor BullMQ workers?

Ping a heartbeat URL from the worker’s completed handler for scheduled jobs, and/or add a periodic liveness ping. Create a matching heartbeat monitor so a dead worker or a missed cycle triggers an alert.

What if the worker loses its Redis connection?

It stops processing jobs. Because the heartbeat pings come from the worker, they stop too, and Cronmint flags the missed check-in.

Does this work for repeatable jobs?

Yes. Set the heartbeat interval to match the repeatable job’s schedule and ping when that job name completes; a skipped cycle produces no ping and alerts you.