## TL;DR
Timers fail silently when the timer unit is not enabled, the `OnCalendar` expression never matches, or the system clock is wrong. Check `systemctl list-timers`, validate the calendar expression, enable the timer, and it fires on schedule.

## Steps
1. List timers: run `systemctl list-timers` and find yours. Expected: you see whether it exists, when it last ran, and when it fires next (or that it never will).
2. Check it is enabled and active: a timer that is not enabled will not survive a reboot, and an inactive one will not fire. Expected: enabled and active.
3. Validate the `OnCalendar` expression: use `systemd-analyze calendar` on the expression to see the next occurrences. Expected: the expression parses and the next times look right.
4. Check the clock: wrong system time or timezone makes correct expressions fire at surprising times. Expected: the clock and timezone are sane.
5. Check the service it triggers: the timer may fire fine while the service it starts fails. Expected: the service unit runs cleanly when started manually.

## When to use
- A systemd timer never triggers its service
- Timers that worked and stopped (often after reboot: not enabled)
- Validating cron-to-systemd migrations

## When not to use
- The timer fires but the service fails (service debugging)
- One-shot manual runs (use the service directly)

## Tool compatibility
- systemd timers (`systemctl list-timers`, `systemd-analyze calendar`)

## Variant phrasings
### systemd timer enabled but not running
Check `systemctl status` on the timer unit itself; enabled is not the same as active.

### oncalendar never matches
Test the expression with `systemd-analyze calendar` before deploying it.

## Why it happens
Timers are separate units from their services with their own enablement state, and `OnCalendar` is a rich expression language where a small mistake yields "never". The failure is silent by design (timers do not alert), so listing and analyzing is the only way to see it.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_Z3uk0hdvSk47oT6Q5cx9hQ
