Koha Solutions
All articles

Koha Cron Jobs: The Ones That Actually Matter

Koha’s web interface shows you the library; cron jobs are what make it behave over time. Which are essential, and what silently breaks without each.

September 29, 2026 · Koha Solutions

Koha's web interface shows you the library. The cron jobs are what make it behave over time.

This distinction matters because of how these fail. Miss a scheduled job and nothing errors. No warning appears, no screen turns red. A number is simply always zero — and you find out months later when someone asks why no patron has ever been charged a fine.

The essential cron jobs

JobWhat it doesFrequencyWhat silently breaks without it
FinesAccrues overdue chargesDailyNobody is ever fined. No error; balances stay zero
Overdue noticesGenerates overdue messagesDailyNo overdue reminders. Patrons keep items indefinitely
Message queueSends queued emailEvery 15–60 minNotices generate and never send. Queue grows forever
Holds queueBuilds the pull listSeveral times dailyStaff have no list of holds to fetch from the shelves
Expired holdsCancels holds not collectedDailyUncollected holds block items for the next patron indefinitely
Automatic renewalsRenews eligible loansDailyAuto-renew is advertised to patrons and never happens
Long overdueMarks very late items lost, charges replacementDailyItems stay "overdue" forever; stock figures wrong
Session cleanupClears expired sessionsDailyDatabase grows; logins slow over months
Search indexKeeps the index currentContinuous or frequentNew records are invisible in search

The "silently breaks" column is the one to read twice. Every entry is a failure with no error message.

Fines and overdues

The two most consequential, and the most commonly missing.

Order matters: fines should accrue before overdue notices generate, so a notice states the correct amount. Reversed, patrons receive notices quoting yesterday's balance and dispute the difference at the desk.

If fines are not appearing at all, check this job before anything else. It is the answer more often than any configuration setting.

The message queue

Generating a notice and sending it are two different jobs, and this catches people constantly. Koha writes notices into a queue; a separate job delivers what is waiting.

You can therefore have a perfectly configured mail server, correct templates, working triggers — and no email, because nothing is processing the queue. See Koha overdue notices not sending for the full diagnostic path.

Holds and the holds queue

The holds queue job builds the list staff use to pull requested items off the shelves. Without it there is no list, holds sit unfulfilled, and patrons who placed a hold on an available item are told nothing.

The expired-holds job matters just as much in the other direction: without it, an uncollected hold blocks that copy for everyone else, permanently.

Automatic renewals

Worth verifying against your circulation rules before switching on. Auto-renewal interacts with hold status, renewal limits and patron account expiry, and the combination occasionally surprises people. Test with a real loan before announcing it.

Housekeeping

Session cleanup, temporary file removal and index maintenance degrade slowly rather than failing outright. Nobody notices for a year, and then the system is inexplicably sluggish.

How to tell whether a job actually ran

The hard part, and the reason this article exists.

  • Check the crontab for the instance user, not root. Jobs added to the wrong user's crontab are a classic failure — they exist, they just never run as anyone who can do anything.
  • Redirect output somewhere. A job whose output goes nowhere cannot be diagnosed after the fact.
  • Look for effects, not evidence of execution. Did any fine accrue yesterday? Did any notice enter the queue? These are the real tests.
  • "No error email arrived" proves nothing. A job that was never scheduled sends no errors either. This is the reasoning trap that keeps libraries confident and wrong.

The underlying problem is that Koha gives you no readable history of what ran and what it did. You are inferring backwards from effects — which works, but only once you already suspect something is wrong.

That is worth fixing at the platform level rather than per library. On Koha Cloud these jobs are managed and each library gets a readable run history, so "did fines accrue last night?" is a question you answer by looking rather than by trusting. Scheduled jobs you can actually see — no SSH, no crontab.

Common cron mistakes

  • Wrong user — added to root instead of the Koha instance user.
  • Missing environment — cron runs with a minimal environment; a script that works in your shell may not work in cron.
  • Overlapping runs — a long job still running when the next starts. With fines, this can double-charge.
  • Output discarded — nothing to look at when it goes wrong.
  • Lost in a server migration — the database and files were moved, the crontab was not. Everything looks fine for weeks.
  • Removed during an upgrade and never restored. See our upgrade guide.

A monthly verification routine

  1. Did any fine accrue in the last week?
  2. Did any overdue notice enter the queue?
  3. Is the queue draining, or growing?
  4. Does the holds pull list have today's date?
  5. Have any long-overdue items been marked lost recently?
  6. Do newly cataloged records appear in a search?

Six questions, five minutes, once a month. It catches almost everything on this page before a patron does.


Suspect a job has not run in months? We audit Koha scheduled jobs and tell you exactly what has and has not been happening — usually within a day.

Share this article

Would you rather not run the server?

We set up, host and maintain your library system — backups, upgrades and notices included. You look after your students; we look after the server.

Explore Koha Cloud