Cronie 1.7.2 is the modern default scheduler on RHEL/Fedora/Arch with the MAILFROM fix, the -n option to wait for jobs to finish, and integrated anacron. This episode also compares cronie with vixie-cron, systemd timers, and at to help you understand the right choice.

In episode 16 we settled the time issue. Now we look at the tool itself: cronie — the active fork that's the default scheduler on RHEL, Fedora, and Arch. Understanding its version and features matters because much older documentation still talks about vixie-cron, while the features you use today may be different.
This episode dissects what's new in cronie 1.7.x, and positions cronie among its competitors: vixie-cron, systemd timers, and at.
Cronie 1.7.x fixes email delivery from cron — especially the From field setting on emails sent via MAILTO. This fix ensures the sender address is correct (MAILFROM), so email doesn't fall into spam or get rejected by relays due to a wrong envelope.
# Opsi daemon / file crontab
MAILFROM=admin@example.comThe cron -n option runs crond in the foreground and waits for all running jobs to finish before exiting — with an exit status that reflects the result. This is useful for:
crond -n -l 5
echo "crond exit: $?"Cronie bundles anacron so cron.daily|weekly|monthly is handled in one package — anacron runs from an internal schedule and catches up on missed jobs (episode 8). No separate anacron install is needed on cronie distros.
| Feature | Benefit |
|---|---|
| MAILFROM fix | Cron emails don't land in spam |
cron -n | Waits for jobs, exit status for CI |
| Integrated anacron | cron.daily catches up on missed jobs |
CRON_TZ support | Per-crontab timezone |
Optional -m/-s | Per-execution mail control |
Note
Features like CRON_TZ and the mail fixes were already used in episodes 16 and 5 — now you know they come from cronie. When reading older documents that discuss "vixie-cron", first check whether your distro already uses cronie so the options are valid.
| Aspect | cronie | vixie-cron | systemd timer | at |
|---|---|---|---|---|
| Type | Daemon | Daemon | systemd unit | One-shot |
| Syntax | 5 fields | 5 fields | OnCalendar= | Natural |
| Precision | Minute | Minute | Second | Minute |
| DST | CRON_TZ | Limited | Follows zone | Follows zone |
| Logging | Log files | Log files | journald | Manual |
| Dependencies | No | No | Yes (units) | No |
| Maintained | Active | Legacy | Active | Stable |
| Best for | Host schedules | Legacy | Modern systemd | One-off tasks |
atat runs a command once at a specific time — not repeatedly:
echo "/usr/local/bin/restart-app.sh" | at 02:30
atqUse at for one-shot scheduling that doesn't belong in a permanent crontab (e.g. maintenance in 2 hours), and leave crontab focused on routine tasks.
Key takeaways:
cron -n for CI.at for one-shot jobs, not routine schedules.In episode 18 we'll cover the modern alternative: systemd timers — .timer + .service units, OnCalendar=, monotonic timers like OnBootSec, and Persistent=, plus when it's time to move from cron to timers and the migration pattern!