Services & systemd

A timer runs late or misses offline periods

Scheduled jobs miss the expected time. Check calendar interpretation, activation, random delays and whether offline calendar runs should be caught up.

On this page
  1. Symptoms & scope
  2. Possible causes
  3. Diagnose safely
  4. Evidence-guided next steps
  5. References & review
  6. Related problems

Symptoms & scope

  • The next trigger differs from the intended local time.
  • No task runs after downtime covering the scheduled deadline.

Relevant environment

systemd calendar or monotonic timers; Persistent catch-up applies to OnCalendar.

Recognizable messages (synthetic examples)
systemd[1]: example.timer: Failed to parse calendar specification, ignoring: every-workday

This detects invalid syntax, not every late timer.

Possible causes

These are possible explanations, not a confirmed diagnosis. Several independent faults can coexist.

  • The timer may be inactive, use a wrong timezone or expression, or include a configured random delay.
  • Persistent may be absent or the timer monotonic; an already active target is not restarted whenever the timer expires.

Diagnose safely

Run one command at a time in the relevant session. Read the explanation first. Uppercase placeholders need your own values; tools and privileges vary by distribution. These commands are displayed here and never executed by the website.

Check 1

Lists deadlines and activations; use --user for user timers.

systemctl list-timers --all --no-pager

Interpret the result: An absent next deadline suggests an inactive or exhausted timer. A recent trigger does not prove the target completed.

Check 2

Replace the timer name; reads its definition without running the job.

systemctl cat example.timer

Interpret the result: Compare OnCalendar, timezone, Persistent, AccuracySec and RandomizedDelaySec. OnBootSec has different missed-run behavior.

Check 3

Replace the quoted expression with the exact OnCalendar value; calculation only.

systemd-analyze calendar 'Mon..Fri 18:00 Europe/Berlin'

Interpret the result: Normalization and next elapse reveal syntax and timezone assumptions. Repair rejected syntax before evaluating delays.

Evidence-guided next steps

Correct schedule and timer activation

If the expression resolves to the wrong deadline, declare the intended schedule and timezone. Enable and start the timer, rather than only its service, for recurring execution.

Precautions: Check daylight-saving transitions and task duration. Preserve the old schedule and avoid overlapping manual runs.

Recovery / rollback: Restore the old timer definition and enabled state, reload the manager and inspect its next deadline.

Did this solution help you?

Share this solution#

Choose catch-up behavior deliberately

For calendar jobs that should catch up after downtime, set Persistent=true on this timer. If late execution is undesirable, leave it disabled and handle missed business deadlines in the job.

Precautions: Activation can trigger the task, subject to random delay. Persistent does not replay every missed occurrence.

Recovery / rollback: Restore the previous Persistent value and timer state; completed task side effects are not undone by a timer edit.

Did this solution help you?

Share this solution#

References & review

This guide was prepared from primary project or distribution sources and reviewed on the date shown. This is an editorial source check, not evidence that a fix was reproduced on your hardware. Diagnostic log examples are synthetic fixtures. Version-dependent details must be checked against your installed release.