Crontab Special Strings: @daily, @hourly, @reboot and Other Shortcuts
For common schedules, @-prefixed shortcuts can make a crontab easier to scan. Rather than decoding 0 0 * * 0, you write @weekly and the daemon maps it to the 5-field equivalent internally. Seven shortcuts cover the most common scheduling intervals.1
Support for @-shortcuts varies by implementation. Most modern Linux cron implementations (vixie-cron, cronie, systemd cron compatibility layer) support all seven. Some minimal implementations like busybox cron do not support any.2 When portability matters, across containers, embedded systems, or CI environments, use the equivalent 5-field expression, which is universally supported.
All seven shortcuts and their equivalents
@reboot has no 5-field equivalent and runs once when the cron daemon starts. @yearly and @annually are interchangeable aliases for 0 0 1 1 *: midnight on January 1st. @monthly maps to 0 0 1 * *, midnight on the first of each month. @weekly maps to 0 0 * * 0, midnight every Sunday. @daily and @midnight are aliases for 0 0 * * *. @hourly maps to 0 * * * *, at minute 0 of every hour.1 Memorizing these seven mappings is straightforward once you use them regularly, because the names map directly to common English scheduling terms.
When shortcuts are safe to use
Shortcuts are safe when the cron implementation is known and stable, such as a Linux server running vixie-cron or cronie where the daemon version rarely changes. In that controlled environment, @daily is immediately understood by anyone reading the crontab, and there is no risk of the expression being copied to a platform that lacks shortcut support. Before copying a shortcut into another platform, map it to its 5-field equivalent: @hourly becomes 0 * * * *, @daily becomes 0 0 * * *, and you can translate @weekly into its 5-field form before you commit to a platform-specific format.
The same caution applies to systemd, whose daily and weekly presets look like the cron shortcuts but follow a different calendar syntax and cannot be pasted into a crontab unchanged. When you are unsure which daemon will run the file, the 5-field form is the lowest-risk choice because every implementation understands it and none of them reinterpret it. Treat a shortcut as a readability aid for a known host, not as a portable unit of scheduling logic.
Practical use cases
@reboot is used for startup initialization: starting background services, mounting shares, or sending a boot-time notification. @daily is the most common production shortcut, appearing in backup scripts, log rotation, and cache-clearing jobs. Building on this, @weekly covers full-system maintenance like disk space checks or package update reports. @monthly fits billing scripts and monthly report generation. @hourly suits polling jobs and queue flushes where a one-minute interval is too aggressive and a day is too coarse.
The key consideration when picking a shortcut is whether the crontab will ever move off its current platform. A @daily entry that has run on the same Linux server for years is perfectly safe to leave as-is. The risk appears when someone copies that crontab into a GitHub Actions workflow file or a Kubernetes CronJob manifest without translating the shortcut first, because those platforms reject @-shortcuts and the deployment either fails silently or never schedules the job.
Portability and when not to use shortcuts
@-shortcuts are supported by vixie-cron, cronie, and most Linux cron implementations.3 Yet AWS EventBridge, Kubernetes CronJob, and GitHub Actions do not support them.4 Cloudflare Workers requires 5-field cron expressions in wrangler.toml. systemd OnCalendar uses different named presets (daily, weekly) that look similar but use different syntax. Consequently, when writing cron expressions for portability across platforms, the 5-field equivalent is safer. Choosing the 5-field form from the start is the simplest way to avoid a failed deployment caused by a platform that silently ignores @-shortcuts.
Mapping shortcuts to standard cron
Every @-shortcut has a deterministic 5-field equivalent, and memorizing the seven mappings takes less time than you might expect. @reboot is the only exception with no 5-field form; all others translate directly: @hourly is 0 * * * *, @daily is 0 0 * * *, @weekly is 0 0 * * 0, @monthly is 0 0 1 * *, and @yearly is 0 0 1 1 *. Keeping this mapping in a team wiki or code comment ensures that anyone porting a crontab to GitHub Actions, Kubernetes, or Cloudflare Workers can do the substitution without guessing.
Choosing between a shortcut and its 5-field equivalent
Choosing @daily over 0 0 * * * is a readability decision for contexts where portability is not a concern. For crontabs that run only on Linux servers with vixie-cron or cronie, @daily is unambiguous and self-documenting. A new team member reading the crontab does not need to decode the 5-field equivalent to understand the intent. Yet for crontabs that may be copied to a CI pipeline, a Kubernetes manifest, or a container image with busybox cron, the 5-field form is safer because support for @-shortcuts is not guaranteed.
For documentation and code review, add a comment above each crontab line with the plain-English description regardless of which form you use. A line reading # Run daily at midnight UTC above 0 0 * * * costs nothing and makes the schedule auditable without requiring the reader to memorize shortcut definitions.
@reboot and system service dependencies
@reboot jobs start when the cron daemon initializes, which happens before your application services are fully ready on most systems. A @reboot entry that starts a scraper depending on a database fails intermittently if the database has not finished its own startup sequence. This race condition is one of the most common reasons @reboot jobs fail in production, because the job starts successfully on the first attempt but exits when a required service is not yet accepting connections.
Using sleep or systemd ordering for @reboot jobs
The standard workaround is a prefixed sleep: @reboot sleep 30 && /usr/local/bin/myjob. On systemd systems, the stronger solution is a dedicated .service unit with After=postgresql.service and Requires=postgresql.service in the [Unit] section.5 This guarantees your job starts only after the dependency is ready, relying on a timed sleep alone that can fail on slower systems or during heavy reboot sequences, so reserve @reboot for jobs with no service dependencies.
When to use this
Use @-shortcuts in Linux crontabs for common recurring schedules (daily, weekly, monthly) where readability is more important than portability. Use @reboot for startup tasks. Use the 5-field equivalent when targeting platforms that may not support shortcuts, or when the schedule must be auditable without knowing the shortcut definitions. If you are not sure which 5-field expression a shortcut like @weekly or @monthly maps to, a parser shows both forms side by side so you can check them before deploying.
Examples
Daily cleanup job
0 0 * * * /usr/bin/cleanup.sh
@daily /usr/bin/cleanup.sh
@daily is identical to 0 0 * * * and is clearer in intent.
Start a background service on boot
@reboot runs once when the cron daemon starts. Use absolute paths.
- 1.
Linux man7, "crontab(5) — Linux manual page," man7.org, accessed June 2026. https://www.man7.org/linux/man-pages/man5/crontab.5.html
- 2.
BusyBox, "crond.c," GitHub, accessed June 2026. https://github.com/mirror/busybox/blob/371fe9f7/miscutils/crond.c
- 3.
GitHub, "Events that trigger workflows," docs.github.com, accessed June 2026. https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows
- 4.
Cronie, "crontab(5) — cronie man page," github.com, accessed June 2026. https://github.com/cronie-crond/cronie/blob/master/man/crontab.5
- 5.
Lennart Poettering, "systemd.unit(5) — Linux manual page," man7.org, accessed June 2026. https://www.man7.org/linux/man-pages/man5/systemd.unit.5.html