Process monitoring for cron jobs and background workers
Cron jobs and background workers fail quietly. They just stop. No error page, no warning, nothing, until something downstream breaks and a customer finds it before you do.
AppSignal Process Monitoring tells you when a job misses a beat, runs late, or stops, then links you to the error, trace, and logs from that run.
The trouble with silent failures
A 500 page gets attention. A cron job that stopped running three days ago does not, until you are reconstructing the timeline from scratch.
Process monitors help you answer questions like:
- Is my background process up and running?
- Are my cron jobs running as scheduled?
- Which occurrence failed, ran long, or drifted off schedule?
- What error and log lines belong to that run?
Two kinds of monitor: cron and heartbeat
AppSignal supports two kinds of process monitors:
- Cron process monitors: for scheduled jobs that should start and finish on a schedule, such as nightly backups or invoice runs.
- Heartbeat process monitors: for workers and daemons that should never go quiet, such as Sidekiq, queue consumers, or long-running services.
Create a monitor with an identifier, then set the schedule that fits the job:
- Cron: a crontab schedule and server timezone, plus the maximum duration AppSignal should wait for a finish event before it flags the occurrence as failed.
- Heartbeat: the maximum duration allowed between heartbeat events before AppSignal considers the process unresponsive.
Send events from your code
If you're already using an AppSignal integration, use the built-in helper for your language:
# Ruby
Appsignal::CheckIn.cron("send_invoices") do
send_invoices
end// Node.js
import { checkIn } from "@appsignal/nodejs";
while (true) {
checkIn.heartbeat("job_processor");
// ... your code here ...
}Or Wrap it, no code changes needed
For processes outside an AppSignal integration, or ones you'd rather not touch, wrap the command instead:
appsignal-wrap sync_customers --cron -- python ./sync_customers.pyappsignal-wrap sends the start and finish cron events around the command, reports a failure if the exit code is non-zero, and captures stdout/stderr as logs, all without touching the script itself. Swap --cron for --heartbeat to monitor a long-running process instead.
Read the process monitoring docs.
Every run gets occurrence-level detail
See recent runtimes, statuses, and performance for every run. Drill into one occurrence to catch the slow ones and fix what actually hurts.
Other tools tell you a job broke. AppSignal shows you the error, slow query, and log lines from that run in one place. Leave notes in the logbook so the next person on call has context.
Learn more on the process monitoring tour page.
Ready to enable your AI workflow
A missed occurrence rarely explains itself. The useful part is what happened around it: the error it threw, the query that hung, the log lines right before it gave up.
AppSignal Intelligence brings that context into the tools you already use. Point your AI editor at our hosted MCP endpoint, or use the CLI from your terminal. Ask about the failed run the same way you'd ask about any other incident, no duplicate setup.
MCP
Hosted endpoint for AI editors. Connect Claude, Cursor, Zed, and more. No Docker required.
CLI
Query incidents, logs, traces, and dashboards from your terminal, with an agent skill built in.
Start monitoring background work today
Our full monitoring toolkit is available on all plans, including our free plan.
Ready to try it? Start your 30-day free trial, no credit card required. And follow the rest of our Launch Week announcements.
Make your next crash make sense.
Free for 30 days. No credit card. Two-minute install.