Chat on WhatsApp
Magento Cron & Indexer Triage

Your cron is dead. We get it running again.

Stuck indexers, a jammed cron_schedule, a reindex that hangs, missing order emails — when Magento’s scheduler stops, everything downstream quietly breaks. We reproduce it, find the real root cause, and fix it with regression tests.

  • Emergency triage starts in under 4 hours
  • Reproduce on staging before we change anything
  • Quick Fix from $99 · Sprint $499 · fixed price upfront
7-day fix warranty Adobe-Certified developer 8+ countries served
  • < 4h Emergency triage

    For a dead cron blocking orders, emails or stock sync we start triage within four hours of access.

  • 24–48h Most cron/indexer fixes

    A jammed cron_schedule table or stuck indexer is usually root-caused and fixed inside a day.

  • 100% Reproduce first

    We confirm the failure on staging and capture the exact CLI output before changing anything.

  • 0 Re-occurrence target

    We harden the crontab and MView triggers so the same job does not silently die again.

Common bugs we fix

The cron & indexer failures we see every week

Real Magento symptoms, real error strings. If yours is not listed, paste the CLI output in the form and we will diagnose it.

  • Cron not running at all

    No * * * * * php bin/magento cron:run line in crontab, so emails, indexers and sitemaps never fire. We install and verify the schedule, then confirm jobs land in cron_schedule.

  • cron_schedule jammed

    Rows stuck in running or piling up as missed — the queue clogs and nothing new dispatches. We clear the stale rows, fix overlap, and tune cron group schedule_lifetime.

  • Indexer stuck "processing" / invalid

    bin/magento indexer:status shows Product Price or Catalog Search frozen on processing or invalid. We unstick the indexer, reset the state, and reindex cleanly.

  • "Index … is locked" / reindex hangs

    A killed reindex leaves Index ... is locked by pid in index_indexer_state, or indexer:reindex hangs and times out. We release the lock and rerun safely.

  • MView triggers not firing

    On "Update by Schedule" the mview_state changelog stops growing and price/stock edits never reflect on the storefront. We rebuild the DB triggers and the changelog tables.

  • Emails & sitemap not generating

    Order emails, the XML sitemap and scheduled exports all depend on cron. When cron is dead they silently stop. We restore the consumers and the sitemap / email cron jobs.

How we fix it

Report → reproduce → root-cause → fix → verify

We never patch blind. The exact CLI output is captured on staging first, then the fix is regression-tested before it touches production.

  1. 01

    Report the symptom

    You send the failing behaviour and any CLI output — stuck indexer, missed emails, cron_schedule rows. We confirm scope and access.

    Hour 0
  2. 02

    Reproduce on staging

    We run cron:run, indexer:status and cron:install checks on staging and capture the exact error before touching anything.

    Hour 0 – 2
  3. 03

    Find the root cause

    Missing crontab line, jammed schedule, broken MView trigger, dead message-queue consumer or a lock left by a killed reindex — we trace it to the real cause.

    Hour 2 – 6
  4. 04

    Fix & regression-test

    We apply the fix, reindex cleanly, re-run the affected jobs and add a watchdog check so a silent failure surfaces next time instead of hiding.

    Same day
  5. 05

    Deploy & verify

    We deploy to production, confirm cron_schedule dispatches, indexers report Ready, and emails & sitemap regenerate. You get a short write-up.

    24 – 48h
Pricing

Fixed prices, billed at $25/hr

You see the price before any work starts. Anything out of scope after triage gets quoted upfront — never billed silently.

  • Quick Fix

    $ 99 USD

    ~4h @ $25/hr · 24–48h turnaround

    Best for: One well-defined cron or indexer bug — a missing crontab line or a single stuck indexer.

    • One clearly scoped cron/indexer bug
    • Reproduce on staging + capture CLI output
    • Root-cause + targeted fix
    • Clean reindex + verify indexer:status
    • Short written summary of what broke
    • 7-day fix warranty on the same bug
    Report this bug
  • Emergency / Retainer

    Custom

    24/7 on-call SLA · scoped to your stack

    Best for: Production cron down at peak, or ongoing cover. Includes a $2,499 stabilization sprint (~100h @ $25/hr) option.

    • Everything in Bug-Fix Sprint, plus:
    • 24/7 on-call with < 4h response SLA
    • Deep stabilization sprint — $2,499 (~100h @ $25/hr)
    • Cron + queue + indexer health monitoring
    • Runbook + alerting so failures page you, not your customers
    • Monthly retainer option for continued cover
    Get emergency cover

All work billed at the $25/hr canonical rate. Prices in USD; quotes available in GBP / EUR / AUD / INR — ask in the form.

Report your bug

Tell us what is stuck

Paste the CLI output if you have it. We reply with a triage plan and fixed-price quote within 24 business hours — faster for emergencies.

We will get back to you shortly.

What clients say

Stores we’ve unstuck

Kishan is the best freelancer I worked with.

Kishan is the best freelancer I worked with. He is really an excellent developer! Very knowledgeable, skilled professional. I would definitely recommend

DN

Darius Neimanas

great professional with enthusiasm, knowledge, skill and exceptional patience in solving problems.

great professional with enthusiasm, knowledge, skill and exceptional patience in solving

D

Dennis

Bay Tech

Kishan has done an excellent job in a timely manner He is very knowledgeable, has a very positive attitude, easy to communicate.

Kishan has done an excellent job in a timely manner He is very knowledgeable, has a very positive attitude, easy to communicate. All in all, the best you can ask for. Will definitely rehire when I have jobs to be

ZK

Zisos Katsiapis

Komputron Monoprosopi IKE

Kishan was a huge help on my Magento project.

Kishan was a huge help on my Magento project. Five stars all the

LO

Lauren Osterstock

Kishan was able to resolve an issue that many others could not solve.

Kishan was able to resolve an issue that many others could not solve. Great

MC

Mitch Chiba

10916234 Canada Inc.

Kishan provided a quick and straightforward solution to a problem I thought was complicated.

Kishan provided a quick and straightforward solution to a problem I thought was complicated. I am very impressed and I

NN

Neudell Nicholson

Vertex Select Ltd

Fixing Magento stores in

  • United States
  • United Kingdom
  • Canada
  • Australia
  • Germany
  • France
  • Netherlands
  • India
FAQ

Magento cron & indexer questions, answered straight

How much does it cost to fix a Magento cron or indexer bug?

Most single cron or indexer bugs are a Quick Fix at $99 (~4h @ $25/hr) — a missing crontab line, one stuck indexer, or a single jammed job. A batch of related issues or one gnarly root cause (jammed cron_schedule + broken MView triggers + dead consumers) is a Bug-Fix Sprint at $499 (~20h @ $25/hr) with regression tests. Production-down emergencies use a custom retainer with a 24/7 SLA. You get the fixed price before any work starts.

My Magento cron is not running at all — how do you fix it?

First we check the crontab for the line * * * * * php bin/magento cron:run (and the matching setup:cron:run). If it is missing we run bin/magento cron:install and confirm the user, PHP binary and path are correct. Then we watch the cron_schedule table to confirm jobs move from pending to success. A dead cron is the most common reason emails, the sitemap and indexers all "stop working" at once.

My cron_schedule table is full of "missed" and "running" rows — what does that mean?

Rows stuck in running usually mean a previous cron:run crashed mid-job and never released the slot, so new runs overlap and skip. Rows piling up as missed mean cron fell behind its schedule_lifetime window. We clear the stale rows safely, fix whatever job was hanging, and tune the cron group config (schedule_generate_every, schedule_lifetime, use_separate_process) so the queue stops clogging.

My indexer is stuck on "processing" or shows "invalid" — can you fix it?

Yes. We run bin/magento indexer:status to see which indexer is frozen — commonly Product Price, Catalog Search or Stock. A status stuck on processing normally means a reindex was killed and never reset, or a lock is held. We reset the indexer state, run indexer:reset if needed, then a clean indexer:reindex, and confirm every row reports Ready.

I get "Index … is locked by pid" — how do you clear it?

That error comes from a stale lock in the index_indexer_state table after a reindex was interrupted (deploy, killed process, OOM). We confirm no reindex is actually running, then clear the lock for that indexer and rerun the reindex cleanly. We never just delete locks blindly — we first verify nothing is mid-write so we do not corrupt the index.

reindex hangs or times out on a large catalog — what do you do?

A indexer:reindex that hangs is usually memory pressure, a slow database, or the EAV/flat tables fighting. We profile the slow indexer, raise the relevant batch sizes, run heavy indexers individually instead of all at once, and switch noisy indexers to "Update by Schedule" so they reindex incrementally via MView instead of full rebuilds. On very large catalogs we schedule the full reindex for off-peak.

Price and stock changes never reach the storefront on "Update by Schedule" — why?

On "Update by Schedule" mode Magento relies on MySQL triggers writing into changelog tables, tracked in mview_state. If the triggers were dropped (common after a raw DB import or a partial migration) the changelog stops growing and edits never get picked up. We rebuild the triggers — toggling the indexer mode regenerates them — verify the changelog tables fill again, and confirm a test edit reflects on the frontend.

My order emails and XML sitemap stopped generating — is that a cron problem?

Almost always, yes. Order/transactional emails are queued and sent by the message-queue consumers, and the XML sitemap is generated by a scheduled cron job — both die silently when cron is dead or its consumers are not running. We restore cron:run, confirm the consumers_runner config and the sitemap / email cron jobs, then trigger a regeneration so the backlog clears.

Do you work on staging or directly on my live store?

We reproduce on staging first wherever one exists, capture the exact CLI output, and prove the fix there before going near production. If there is no staging we work on live with extra care — read-only diagnosis first, a backup of the affected tables (cron_schedule, index_indexer_state, mview_state), and changes during a quiet window. Cron and indexer fixes are low-risk when sequenced properly.

Can you fix it without breaking my live store?

Yes. Cron and indexer work is mostly configuration and state cleanup, not code that ships to the frontend, so the blast radius is small. We back up the relevant tables before touching them, clear stale rows rather than truncating whole tables, and run a clean reindex that the storefront keeps serving the old index during. If anything looks off, we roll back the state and reassess — your shoppers never see a half-reindexed catalog.

Cron and indexers broke right after a Magento upgrade — can you fix that?

Yes, this is common. After setup:upgrade the indexers are marked invalid and need a reindex, new cron groups may need re-installing, and a partial deploy can leave a reindex lock behind. We reset and reindex everything, reinstall the crontab if it was wiped, and rebuild MView triggers that the upgrade dropped. If the upgrade itself is unstable we also look at our Magento upgrade bug fixing path.

Is there a guarantee on cron / indexer fixes?

Yes. Every Quick Fix comes with a 7-day warranty on the same bug; Sprints include 14 days of post-fix coverage. If the cron job dies again or the indexer re-locks from the same cause, we fix it at no extra charge. We also add a lightweight watchdog so a future silent failure pages us instead of hiding until your emails or sitemap quietly stop.

Cron down right now?

Send the symptom and any CLI output — emergency triage starts in under 4 hours.

Report your bug