Skip to content
Back to skills

Cron Parser

CSecurity

Read, write, and debug cron expressions with field reference, scheduling logic, and common patterns.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 29, 2026
ai-agentspythongoshellexpressdebugging

Security analysis

C70/100
  • highCreates or modifies cron jobs for persistent execution
  • highCreates or modifies cron jobs for persistent execution

Pro shows the line behind each finding and how to fix it

Scanned September 29, 2026

npx -y skills add aicodedecode/awesome-muse-skills --skill cron-parser --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cron Parser?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Cron Parser
[![Security: C — Skills Directory](https://www.skillsdirectory.com/api/skills/aicodedecode-cron-parser/badge)](https://www.skillsdirectory.com/skills/aicodedecode-cron-parser)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cron-parser
description: Read, write, and debug cron expressions with field reference, scheduling logic, and common patterns.
category: utilities
---

## Overview

Cron expressions are write-only for most people — everyone copies them, few can read them. But
misreading a schedule means backups that never run or jobs that fire 60x too often. This skill makes
cron legible: the five fields, special strings, the day-of-month/day-of-week gotcha, and debugging
techniques for "why didn't it run?"

## When to use

- Writing cron schedules for jobs and automation

- Reading and understanding existing cron expressions

- Debugging jobs that run at wrong times (or not at all)

- Choosing between cron and modern schedulers

- Documenting schedules for teams

## Core concepts

- - **The five fields.** `minute hour day-of-month month day-of-week` — in that order. `30 2 * * *`
  = 2:30 AM daily. Memorize the order with: "my happy dog makes dinner" (minute, hour, dom, month,
  dow) or just drill it until it's reflex.
- - **Field syntax.** `*` (every), `*/15` (every 15), `1,15` (list), `1-5` (range, Mon-Fri for dow),
  `9-17/2` (every 2 hours 9-5). Ranges and steps compose; lists don't take steps in classic cron.
- - **The DOM/DOW trap.** When both day-of-month and day-of-week are restricted (not `*`), cron runs
  when EITHER matches — not both. `0 0 1 * 1` runs on the 1st of the month AND every Monday. This
  surprises everyone once.
- - **Special strings.** `@reboot`, `@yearly`, `@monthly`, `@weekly`, `@daily`, `@hourly` — readable
  shorthands. Note: `@reboot` behavior varies (and doesn't exist in all cron implementations).
- - **Environment minimalism.** Cron runs with a sparse environment: minimal PATH, no shell profile.
  The #1 "works manually, fails in cron" cause is PATH — use absolute paths for everything or set
  PATH explicitly in the crontab.
- - **Cron flavors differ.** Vixie cron (classic Linux), cronie, systemd timers (the modern Linux
  alternative — more features, logging built in), and cloud schedulers (CloudWatch Events, Cloud
  Scheduler) all have quirks. `@reboot`, seconds fields, and timezone handling vary — check your
  implementation.

## Practical workflow

1. 1. **Write it plainly first.** "Every weekday at 9:30 AM" → then translate: `30 9 * * 1-5`.
   Describe in words before encoding — the words are the spec you'll verify against.
2. **Use the field table.** Build expressions field by field:

   - minute (0-59), hour (0-23), dom (1-31), month (1-12), dow (0-7, both 0 and 7 = Sunday)

   - Verify each field independently before combining.

3. **Common patterns (verify against your cron flavor):**

   - `*/5 * * * *` — every 5 minutes

   - `0 * * * *` — hourly

   - `0 2 * * *` — daily 2 AM

   - `0 9 * * 1` — Mondays 9 AM

   - `0 0 1 * *` — first of month midnight

   - `30 9 * * 1-5` — weekdays 9:30 AM

   - `0 0 * * 0` — Sundays midnight

4. 4. **Debug non-running jobs.** Checklist: is the cron daemon running? Is the crontab installed
   for the right user (`crontab -l`)? Absolute paths everywhere? Environment variables set?
   Permissions on the script (executable)? Output captured (redirect stdout/stderr to a log — silent
   failures are cron's default)? Timezone correct (system vs expected)?
5. 5. **Log everything.** `30 2 * * * /opt/job.sh >> /var/log/job.log 2>&1` — without output
   capture, failures vanish. Better: have the job log itself with timestamps.
6. 6. **Consider alternatives.** Need seconds precision, dependencies, retries, or observability?
   Cron is the wrong tool — use systemd timers, or a proper scheduler (Airflow/Temporal for
   workflows, cloud schedulers for cloud). Cron is for simple, independent, minute-granularity jobs.

## Common pitfalls

- - **The DOM/DOW OR trap.** `0 0 1 * 1` doesn't mean "first Monday" — it means "1st AND Mondays."
  For "first Monday," you need wrapper logic in the script.
- - **Timezone confusion.** Cron uses system local time (usually). DST transitions cause skipped or
  doubled runs. For UTC-critical jobs, set `CRON_TZ` (where supported) or run the system in UTC.
- - **Environment assumptions.** `python` resolving via PATH, `~` expansion, locale settings — all
  differ under cron. Absolute paths, explicit env vars, tested in a clean shell.
- - **Overlapping runs.** A job that takes 70 minutes on an hourly schedule stacks up. Use file
  locks (`flock`) to prevent concurrent runs.
- - **Silent failures.** No output redirection = no evidence. Every cron job should log somewhere
  you'll actually check — or alert on failure.
- - **Editing the wrong crontab.** User crontab vs system `/etc/crontab` (which has an extra user
  field) vs `/etc/cron.d/`. The 6-field system format in a 5-field user crontab breaks mysteriously.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…