{ "summary": { "cron_exact": "73/91 (80.2%)", "cron_valid": "87/91 (95.6%)", "systemd_exact": "71/91 (78.0%)", "overall": "63/91 (69.2%)" }, "results": [ { "nl": "every Tuesday at 3am except December", "expected": { "cron": "0 3 * 1-11 2", "systemd": "Tue *-01..11-* 03:00:00" }, "got": { "cron": "0 3 * 1-11 2", "systemd": "Tue *-01..11-* 03:00:00", "note": "Months 1-11 only excludes December." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "the last Friday of every month at 11pm", "expected": { "cron": "0 23 * * 5", "systemd": "Fri *-*-25..31 23:00:00" }, "got": { "cron": "0 23 25-31 * 5", "systemd": "Fri *-*-25..31 23:00:00", "note": "Last Friday of month = DOM 25-31 + Fri (last 7 calendar days always have a Fri)." }, "cron_exact": false, "systemd_exact": true, "cron_valid": true }, { "nl": "every other Monday at noon", "expected": { "cron": "0 12 * * 1", "systemd": "Mon *-*-* 12:00:00" }, "got": { "cron": "0 12 * * 1", "systemd": "Mon *-*-* 12:00:00", "note": "Cron cannot express 'every other week' \u2014 runs every Monday, gate in script with week-of-year %2." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "first Sunday of the month at midnight", "expected": { "cron": "0 0 1-7 * 0", "systemd": "Sun *-*-01..07 00:00:00" }, "got": { "cron": "0 0 1-7 * 0", "systemd": "Sun *-*-01..07 00:00:00", "note": "Day-of-month 1-7 + specific weekday = first occurrence in the month." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "second Tuesday of every month at 9am", "expected": { "cron": "0 9 8-14 * 2", "systemd": "Tue *-*-08..14 09:00:00" }, "got": { "cron": "0 9 15-21 * 2", "systemd": "Tue *-*-15..21 09:00:00", "note": "Second Tuesday of month = DOM 15-21 + Tue." }, "cron_exact": false, "systemd_exact": false, "cron_valid": true }, { "nl": "third Thursday of every month at 2pm", "expected": { "cron": "0 14 15-21 * 4", "systemd": "Thu *-*-15..21 14:00:00" }, "got": { "cron": "0 14 15-21 * 4", "systemd": "Thu *-*-15..21 14:00:00", "note": "DOM 15-21 + Thu = third Thursday of the month." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every Friday the 13th at midnight", "expected": { "cron": "0 0 13 * 5", "systemd": "Fri *-*-13 00:00:00" }, "got": { "cron": "0 0 13 * 5", "systemd": "Fri *-*-13 00:00:00", "note": "Vixie cron OR-matches DOM and DOW; use systemd or guard with a date check." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every 30 seconds", "expected": { "cron": "* * * * *", "systemd": "*-*-* *:*:0/30" }, "got": { "cron": "* * * * *", "systemd": "*-*-* *:*:0/30", "note": "Cron has no sub-minute granularity \u2014 runs every minute." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every 10 seconds", "expected": { "cron": "* * * * *", "systemd": "*-*-* *:*:0/10" }, "got": { "cron": "* * * * *", "systemd": "*-*-* *:*:0/10", "note": "Cron cannot do sub-minute. systemd: 0/10." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every 5 seconds", "expected": { "cron": "* * * * *", "systemd": "*-*-* *:*:0/5" }, "got": { "cron": "* * * * *", "systemd": "*-*-* *:*:0/5", "note": "Cron cannot do sub-minute." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every second", "expected": { "cron": "* * * * *", "systemd": "*-*-* *:*:*" }, "got": { "cron": "* * * * *", "systemd": "*-*-* *:*:0", "note": "Cron has no second-level granularity. Even systemd is not ideal \u2014 consider a long-running daemon." }, "cron_exact": true, "systemd_exact": false, "cron_valid": true }, { "nl": "every Christmas at 7am", "expected": { "cron": "0 7 25 12 *", "systemd": "*-12-25 07:00:00" }, "got": { "cron": "0 7 25 12 *", "systemd": "*-12-25 07:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every New Year's Day at midnight", "expected": { "cron": "0 0 1 1 *", "systemd": "*-01-01 00:00:00" }, "got": { "cron": "0 0 1 1 *", "systemd": "*-01-01 00:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every New Year's Eve at 11:59pm", "expected": { "cron": "59 23 31 12 *", "systemd": "*-12-31 23:59:00" }, "got": { "cron": "59 23 31 12 *", "systemd": "*-12-31 23:59:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every Halloween at 6pm", "expected": { "cron": "0 18 31 10 *", "systemd": "*-10-31 18:00:00" }, "got": { "cron": "0 18 31 10 *", "systemd": "*-10-31 18:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "Independence Day at noon", "expected": { "cron": "0 12 4 7 *", "systemd": "*-07-04 12:00:00" }, "got": { "cron": "0 12 4 7 *", "systemd": "*-07-04 12:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every Valentine's Day at 9am", "expected": { "cron": "0 9 14 2 *", "systemd": "*-02-14 09:00:00" }, "got": { "cron": "0 9 14 2 *", "systemd": "*-02-14 09:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every leap day at midnight", "expected": { "cron": "0 0 29 2 *", "systemd": "*-02-29 00:00:00" }, "got": { "cron": "0 0 29 2 *", "systemd": "*-02-29 00:00:00", "note": "Runs only in leap years." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every April Fools' Day at 8am", "expected": { "cron": "0 8 1 4 *", "systemd": "*-04-01 08:00:00" }, "got": { "cron": "0 8 1 4 *", "systemd": "*-04-01 08:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "Black Friday at 6am", "expected": { "cron": "0 6 23-29 11 5", "systemd": "Fri *-11-23..29 06:00:00" }, "got": { "cron": "0 6 23 11 *", "systemd": "*-11-23 06:00:00", "note": "" }, "cron_exact": false, "systemd_exact": false, "cron_valid": true }, { "nl": "every Thanksgiving at 11am", "expected": { "cron": "0 11 22-28 11 4", "systemd": "Thu *-11-22..28 11:00:00" }, "got": { "cron": "0 11 22 11 *", "systemd": "*-11-22 11:00:00", "note": "" }, "cron_exact": false, "systemd_exact": false, "cron_valid": true }, { "nl": "every morning", "expected": { "cron": "0 7 * * *", "systemd": "*-*-* 07:00:00" }, "got": { "cron": "0 7 * * *", "systemd": "*-*-* 07:00:00", "note": "'first thing' interpreted as 7am." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every night before bed", "expected": { "cron": "0 22 * * *", "systemd": "*-*-* 22:00:00" }, "got": { "cron": "0 22 * * *", "systemd": "*-*-* 22:00:00", "note": "'before bed' interpreted as 10pm." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "first thing in the morning", "expected": { "cron": "0 6 * * *", "systemd": "*-*-* 06:00:00" }, "got": { "cron": "0 6 * * *", "systemd": "*-*-* 06:00:00", "note": "'first thing in the morning' interpreted as 6am." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "at lunchtime every weekday", "expected": { "cron": "0 12 * * 1-5", "systemd": "Mon..Fri *-*-* 12:00:00" }, "got": { "cron": "0 12 * * 1-5", "systemd": "Mon..Fri *-*-* 12:00:00", "note": "'lunchtime' interpreted as noon weekdays." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "at the crack of dawn", "expected": { "cron": "0 5 * * *", "systemd": "*-*-* 05:00:00" }, "got": { "cron": "0 5 * * *", "systemd": "*-*-* 05:00:00", "note": "'crack of dawn' interpreted as 5am." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every day at end of business", "expected": { "cron": "0 17 * * 1-5", "systemd": "Mon..Fri *-*-* 17:00:00" }, "got": { "cron": "0 17 * * 1-5", "systemd": "Mon..Fri *-*-* 17:00:00", "note": "'end of day' interpreted as 5pm weekdays." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "early morning every Sunday", "expected": { "cron": "0 5 * * 0", "systemd": "Sun *-*-* 05:00:00" }, "got": { "cron": "0 5 * * 0", "systemd": "Sun *-*-* 5:00:00", "note": "'first thing' interpreted as 5am." }, "cron_exact": true, "systemd_exact": false, "cron_valid": true }, { "nl": "every afternoon", "expected": { "cron": "0 14 * * *", "systemd": "*-*-* 14:00:00" }, "got": { "cron": "0 14 * * *", "systemd": "*-*-* 14:00:00", "note": "'afternoon' interpreted as 2pm." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every evening", "expected": { "cron": "0 19 * * *", "systemd": "*-*-* 19:00:00" }, "got": { "cron": "0 19 * * *", "systemd": "*-*-* 19:00:00", "note": "'evening' interpreted as 7pm." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "around midnight every Friday", "expected": { "cron": "0 0 * * 5", "systemd": "Fri *-*-* 00:00:00" }, "got": { "cron": "0 0 * * 5", "systemd": "Fri *-*-* 00:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every day except Sunday at 8am", "expected": { "cron": "0 8 * * 1-6", "systemd": "Mon..Sat *-*-* 08:00:00" }, "got": { "cron": "0 8 * * 1-6", "systemd": "Mon..Sat *-*-* 08:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every minute except between 2am and 3am", "expected": { "cron": "* 0-1,3-23 * * *", "systemd": "*-*-* 00..01,03..23:*:00" }, "got": { "cron": "* 0-1,3-23 * * *", "systemd": "*-*-* 00..01..03..23:*:00", "note": "Skip the 2-3 AM hour for backups." }, "cron_exact": true, "systemd_exact": false, "cron_valid": true }, { "nl": "every hour except midnight", "expected": { "cron": "0 1-23 * * *", "systemd": "*-*-* 01..23:00:00" }, "got": { "cron": "0 1-23 * * *", "systemd": "*-*-* 01..03:00", "note": "" }, "cron_exact": true, "systemd_exact": false, "cron_valid": true }, { "nl": "every day at 9am, but not on weekends", "expected": { "cron": "0 9 * * 1-5", "systemd": "Mon..Fri *-*-* 09:00:00" }, "got": { "cron": "0 9 * * 1-5", "systemd": "Mon..Fri *-*-* 09:00:00", "note": "'Not weekends' = Mon-Fri only." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every Tuesday at 4pm except in summer", "expected": { "cron": "0 16 * 1-5,9-12 2", "systemd": "Tue *-01..05,09..12-* 16:00:00" }, "got": { "cron": "0 16 * 1-7,9-12 2", "systemd": "Tue *-01..07,09..12-* 16:00:00", "note": "All months except August (month 8)." }, "cron_exact": false, "systemd_exact": false, "cron_valid": true }, { "nl": "every Sunday at 4am except in July", "expected": { "cron": "0 4 * 1-6,8-12 0", "systemd": "Sun *-01..06,08..12-* 04:00:00" }, "got": { "cron": "0 4 * 1-6,8-12 0", "systemd": "Sun *-01..06,08..12-* 04:00:00", "note": "Every Sunday at 04:00 for months 1-6, August-December (last day of month = DOM 25-31)." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "any day except Friday at midnight", "expected": { "cron": "0 0 * * 0-4,6", "systemd": "Sun..Thu,Sat *-*-* 00:00:00" }, "got": { "cron": "0 0 * * 0-4,6", "systemd": "Sun..Thu,Sat *-*-* 00:00:00", "note": "Every day except Friday (DOW 5) at midnight." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every Tuesday and Thursday at 9am and 3pm", "expected": { "cron": "0 9,15 * * 2,4", "systemd": "Tue,Thu *-*-* 09,15:00:00" }, "got": { "cron": "0 9,15 * * 2,4", "systemd": "Tue,Thu *-*-* 09,15:00", "note": "" }, "cron_exact": true, "systemd_exact": false, "cron_valid": true }, { "nl": "9am Monday through Friday, plus 10am on Saturday", "expected": { "cron": "0 9 * * 1-5\n0 10 * * 6", "systemd": "Mon..Fri *-*-* 09:00:00\nSat *-*-* 10:00:00" }, "got": { "cron": "0 9 * * 1-5\n0 10 * * 6", "systemd": "Mon..Fri *-*-* 09:00:00\nSat *-*-* 10:00:00", "note": "Two schedules \u2014 different times for different days." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every weekday at 8am and weekends at 10am", "expected": { "cron": "0 8 * * 1-5\n0 10 * * 0,6", "systemd": "Mon..Fri *-*-* 08:00:00\nSat,Sun *-*-* 10:00:00" }, "got": { "cron": "0 8 * * 1-5\n0 10 * * 0,6", "systemd": "Mon..Fri *-*-* 08:00:00\nSat,Sun *-*-* 10:00:00", "note": "Two schedules \u2014 earlier weekdays, later weekends." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "twice a day, at 9am and 5pm, every day", "expected": { "cron": "0 9,17 * * *", "systemd": "*-*-* 09,17:00:00" }, "got": { "cron": "0 9,17 * * *", "systemd": "*-*-* 09,17:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "three times a day at 8am, noon, and 6pm", "expected": { "cron": "0 8,12,18 * * *", "systemd": "*-*-* 08,12,18:00:00" }, "got": { "cron": "0 8,12,18 * * *", "systemd": "*-*-* 08,12,18:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every weekday at 9, 12, and 3", "expected": { "cron": "0 9,12,15 * * 1-5", "systemd": "Mon..Fri *-*-* 09,12,15:00:00" }, "got": { "cron": "0 9,12,15 * * 1-5", "systemd": "Mon..Fri *-*-* 9,12,15-*-*", "note": "Bare numbers in business context default to AM/PM logically \u2014 9am, noon, 3pm." }, "cron_exact": true, "systemd_exact": false, "cron_valid": true }, { "nl": "every 90 minutes", "expected": { "cron": "0,30 0,3,6,9,12,15,18,21 * * *\n0 1,4,7,10,13,16,19,22 * * *", "systemd": "*-*-* 00/1:30/90:00" }, "got": { "cron": "0,30 0,3,6,9,12,15,18,21 * * *\n0 6,9,12,15,18,21 * *", "systemd": "*-*-* 06..09,12,15,18,21-*-*", "note": "Cron has no native 90-min interval; expanded. systemd handles natively." }, "cron_exact": false, "systemd_exact": false, "cron_valid": false }, { "nl": "every 45 minutes", "expected": { "cron": "0,45 0,3,6,9,12,15,18,21 * * *\n30 1,4,7,10,13,16,19,22 * * *", "systemd": "*-*-* *:0/45:00" }, "got": { "cron": "*/45 * * * *", "systemd": "*-*-* *:45:00", "note": "" }, "cron_exact": false, "systemd_exact": false, "cron_valid": true }, { "nl": "every 100 minutes", "expected": { "cron": "* * * * *", "systemd": "*-*-* 00:00/100:00" }, "got": { "cron": "* * * * *", "systemd": "*-*-* *:*:0/100", "note": "Cron cannot express intervals that don't align to 0:00. Use a script gate or systemd timer." }, "cron_exact": true, "systemd_exact": false, "cron_valid": true }, { "nl": "every 2 hours starting at 1am", "expected": { "cron": "0 1,3,5,7,9,11,13,15,17,19,21,23 * * *", "systemd": "*-*-* 01/2:00:00" }, "got": { "cron": "0 0,3,6,9,12,15,18,21 * * *", "systemd": "*-*-* 00..03:00/2:00", "note": "On the 1st of each month at 00:00." }, "cron_exact": false, "systemd_exact": false, "cron_valid": true }, { "nl": "every 4 hours starting at 2am", "expected": { "cron": "0 2,6,10,14,18,22 * * *", "systemd": "*-*-* 02/4:00:00" }, "got": { "cron": "0 2,4,6,8,10,12,14,16,18,20,22,24 * * *", "systemd": "*-*-* 02/4:00:00", "note": "Cron */4 starts at 00:00." }, "cron_exact": false, "systemd_exact": true, "cron_valid": false }, { "nl": "every 3 hours between 6am and midnight", "expected": { "cron": "0 6,9,12,15,18,21 * * *", "systemd": "*-*-* 06..23:00/180:00" }, "got": { "cron": "0 6,9,12,15,18,21 * * *", "systemd": "*-*-* 06..23:00/3:00", "note": "Last fire before midnight \u2014 23:00." }, "cron_exact": true, "systemd_exact": false, "cron_valid": true }, { "nl": "every hour on the half hour", "expected": { "cron": "30 * * * *", "systemd": "*-*-* *:30:00" }, "got": { "cron": "30 * * * *", "systemd": "*-*-* *:30:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every hour at quarter past", "expected": { "cron": "15 * * * *", "systemd": "*-*-* *:15:00" }, "got": { "cron": "15 * * * *", "systemd": "*-*-* *:15:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every hour at the 17th minute", "expected": { "cron": "17 * * * *", "systemd": "*-*-* *:17:00" }, "got": { "cron": "17 * * * *", "systemd": "*-*-* 17:00:00", "note": "" }, "cron_exact": true, "systemd_exact": false, "cron_valid": true }, { "nl": "at 23 minutes past every hour during the workday", "expected": { "cron": "23 9-17 * * 1-5", "systemd": "Mon..Fri *-*-* 09..17:23:00" }, "got": { "cron": "23 9-17 * * 1-5", "systemd": "Mon..Fri *-*-* 09..17:59:00", "note": "9-17 inclusive covers up to 17:59." }, "cron_exact": true, "systemd_exact": false, "cron_valid": true }, { "nl": "at 3pm UTC every day", "expected": { "cron": "0 15 * * *", "systemd": "*-*-* 15:00:00 UTC" }, "got": { "cron": "0 15 * * *", "systemd": "*-*-* 15:00:00 UTC", "note": "Cron uses system timezone; set TZ=UTC at top of crontab." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "at 9am Eastern Time every weekday", "expected": { "cron": "0 9 * * 1-5", "systemd": "Mon..Fri *-*-* 09:00:00 America/New_York" }, "got": { "cron": "0 9 * * 1-5", "systemd": "Mon..Fri *-*-* 09:00:00 America/New_York", "note": "Cron has no built-in TZ; set TZ=America/New_York in env." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "5 minutes after every boot", "expected": { "cron": "@reboot sleep 300 && cmd", "systemd": "OnBootSec=5min" }, "got": { "cron": "@reboot sleep 30 && cmd", "systemd": "OnBootSec=5min", "note": "Use OnBootSec= in systemd timers (not OnCalendar)." }, "cron_exact": false, "systemd_exact": true, "cron_valid": true }, { "nl": "1 hour after the service starts", "expected": { "cron": "@reboot sleep 3600 && cmd", "systemd": "OnUnitActiveSec=1h" }, "got": { "cron": "@reboot sleep 336 && cmd", "systemd": "OnUnitActiveSec=1h", "note": "OnUnitActiveSec= = relative to service activation. systemd-only feature." }, "cron_exact": false, "systemd_exact": true, "cron_valid": true }, { "nl": "if missed during shutdown, run on next boot", "expected": { "cron": "0 0 * * *", "systemd": "OnCalendar=daily\nPersistent=true" }, "got": { "cron": "0 0 * * *", "systemd": "OnCalendar=daily\nPersistent=true", "note": "Persistent=true is a systemd-specific flag \u2014 runs missed jobs on next boot. Cron has no equivalent." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "with random delay up to 30 minutes, every hour", "expected": { "cron": "0 * * * * sleep $((RANDOM % 1800))", "systemd": "OnCalendar=hourly\nRandomizedDelaySec=30min" }, "got": { "cron": "0 * * * *", "systemd": "OnCalendar=hourly\nRandomizedDelaySec=30min", "note": "RandomizedDelaySec= adds jitter \u2014 systemd-only." }, "cron_exact": false, "systemd_exact": true, "cron_valid": true }, { "nl": "first weekday of every month at 8am", "expected": { "cron": "0 8 1-3 * 1-5", "systemd": "Mon..Fri *-*-01..03 08:00:00" }, "got": { "cron": "0 8 1-3 * 1-5", "systemd": "Mon..Fri *-*-01..03 08:00:00", "note": "First weekday of month = DOM 1-3 + Mon-Fri (by day 4 there's always been a weekday)." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "at the top of every hour", "expected": { "cron": "0 * * * *", "systemd": "*-*-* *:00:00" }, "got": { "cron": "0:00 * * * *", "systemd": "*-*-* 00:00:00", "note": "" }, "cron_exact": false, "systemd_exact": false, "cron_valid": false }, { "nl": "every 15 minutes", "expected": { "cron": "*/15 * * * *", "systemd": "*-*-* *:0/15:00" }, "got": { "cron": "*/15 * * * *", "systemd": "*-*-* *:0/15:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every 5 minutes", "expected": { "cron": "*/5 * * * *", "systemd": "*-*-* *:0/5:00" }, "got": { "cron": "*/5 * * * *", "systemd": "*-*-* *:0/5:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every Sunday at 2:15am", "expected": { "cron": "15 2 * * 0", "systemd": "Sun *-*-* 02:15:00" }, "got": { "cron": "15 2 * * 0", "systemd": "Sun *-*-* 02:15:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "rotate logs nightly at 3am", "expected": { "cron": "0 3 * * *", "systemd": "*-*-* 03:00:00" }, "got": { "cron": "0 3 * * *", "systemd": "*-*-* 03:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "weekly maintenance Sunday at 4am", "expected": { "cron": "0 4 * * 0", "systemd": "Sun *-*-* 04:00:00" }, "got": { "cron": "0 4 * * 0", "systemd": "Sun *-*-* 04:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "first day of each quarter at midnight", "expected": { "cron": "0 0 1 1,4,7,10 *", "systemd": "*-01,04,07,10-01 00:00:00" }, "got": { "cron": "0 0 1 1,4,7,10 *", "systemd": "*-01,04,07,10-01 00:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "last day of each quarter at 6pm", "expected": { "cron": "0 18 28-31 3,6,9,12 *", "systemd": "*-03,06,09,12-* 18:00:00" }, "got": { "cron": "30 18 28-31 3,6,9,12 *", "systemd": "*-03,06,09,12-* 18:00:00", "note": "Last day of quarter \u2014 cron approximates with DOM 28-31, needs date check." }, "cron_exact": false, "systemd_exact": true, "cron_valid": true }, { "nl": "first Monday of each quarter", "expected": { "cron": "0 0 1-7 1,4,7,10 1", "systemd": "Mon *-01,04,07,10-01..07 00:00:00" }, "got": { "cron": "0 0 1-7 1,4,7,10 1", "systemd": "Mon *-01,04,07,10-01..07 00:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every fiscal year start (April 1)", "expected": { "cron": "0 0 1 4 *", "systemd": "*-04-01 00:00:00" }, "got": { "cron": "0 0 1 4 *", "systemd": "*-04-01 00:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "twice an hour", "expected": { "cron": "0,30 * * * *", "systemd": "*-*-* *:00,30:00" }, "got": { "cron": "0,30 * * * *", "systemd": "*-*-* *:00,30:00", "note": "On the hour and half hour. Use list 0,30 not */30 to be explicit." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "four times a day at quarter days", "expected": { "cron": "0 0,6,12,18 * * *", "systemd": "*-*-* 00,06,12,18:00:00" }, "got": { "cron": "0 9,15,19,21 * * *", "systemd": "*-09,15,19,21-* 09,15,19,21", "note": "" }, "cron_exact": false, "systemd_exact": false, "cron_valid": true }, { "nl": "biweekly on Friday at 5pm", "expected": { "cron": "0 17 * * 5", "systemd": "Fri *-*-* 17:00:00" }, "got": { "cron": "0 17 * * 5", "systemd": "Fri *-*-* 17:00:00", "note": "Cron cannot express 'every other Friday' \u2014 runs this Friday; gate in script with day-of-month %2." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "fortnightly on Monday morning", "expected": { "cron": "0 9 * * 1", "systemd": "Mon *-*-* 09:00:00" }, "got": { "cron": "0 9 * * 1", "systemd": "Mon *-*-* 09:00:00", "note": "Fortnightly = every 2 weeks. Cron cannot natively. Gate in script." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every minute between 9am and 5pm on weekdays", "expected": { "cron": "* 9-16 * * 1-5", "systemd": "Mon..Fri *-*-* 09..16:*:00" }, "got": { "cron": "* 9-16 * * 1-5", "systemd": "Mon..Fri *-*-* 09..16:*:00", "note": "9-16 inclusive covers 9:00 to 16:59 (just before 5pm)." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every 10 minutes from 8am to 6pm exclusive", "expected": { "cron": "*/10 8-17 * * *", "systemd": "*-*-* 08..17:00/10:00" }, "got": { "cron": "*/10 8-17 * * 1-5", "systemd": "Mon..Fri *-*-* 08..17:00/10:00", "note": "8-17 inclusive covers up to 17:59." }, "cron_exact": false, "systemd_exact": false, "cron_valid": true }, { "nl": "at 11:59pm on December 31st", "expected": { "cron": "59 23 31 12 *", "systemd": "*-12-31 23:59:00" }, "got": { "cron": "59 23 31 12 *", "systemd": "*-12-31 23:59:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "noon on March 1st", "expected": { "cron": "0 12 1 3 *", "systemd": "*-03-01 12:00:00" }, "got": { "cron": "0 12 1 3 *", "systemd": "*-03-01 12:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "8am on the 15th of every month", "expected": { "cron": "0 8 15 * *", "systemd": "*-*-15 08:00:00" }, "got": { "cron": "0 8 15 * *", "systemd": "*-*-15 08:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every Sunday at 6am", "expected": { "cron": "0 6 * * 0", "systemd": "Sun *-*-* 06:00:00" }, "got": { "cron": "0 6 * * 0", "systemd": "Sun *-*-* 06:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every Saturday night at 11pm", "expected": { "cron": "0 23 * * 6", "systemd": "Sat *-*-* 23:00:00" }, "got": { "cron": "0 23 * * 6", "systemd": "Sat *-*-* 23:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every day in March", "expected": { "cron": "0 0 * 3 *", "systemd": "*-03-* 00:00:00" }, "got": { "cron": "0 0 * 3 *", "systemd": "*-03-* 00:00:00", "note": "Defaults to midnight." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "weekdays in Q1 at 9am", "expected": { "cron": "0 9 * 1-3 1-5", "systemd": "Mon..Fri *-01..03-* 09:00:00" }, "got": { "cron": "0 9 * 1-3 1-5", "systemd": "Mon..Fri *-01..03-* 09:00:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every minute on the dot", "expected": { "cron": "* * * * *", "systemd": "*-*-* *:*:00" }, "got": { "cron": "* * * * *", "systemd": "*-*-* *:*:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every Friday at 4:20pm", "expected": { "cron": "20 16 * * 5", "systemd": "Fri *-*-* 16:20:00" }, "got": { "cron": "20 16 * * 5", "systemd": "Fri *-*-* 16:20:00", "note": "" }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every prime-numbered minute of every hour", "expected": { "cron": "2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59 * * * *", "systemd": "*-*-* *:02,03,05,07,11,13,17,19,23,29,31,37,41,43,47,53,59:00" }, "got": { "cron": "2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59 * * *", "systemd": "*-*-* *:02,03,05,07,11,13,17,19,23,29,31,37,41,43,47,53,59:00", "note": "Listed primes 0-59." }, "cron_exact": false, "systemd_exact": true, "cron_valid": false }, { "nl": "every Monday and Wednesday at 6am from March to October", "expected": { "cron": "0 6 * 3-10 1,3", "systemd": "Mon,Wed *-03..10-* 06:00:00" }, "got": { "cron": "0 6 * 3-10 1,3", "systemd": "Mon,Wed *-03..10-* 06:00:00", "note": "Mon and Wed at 6am, March through October only." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "every 45 minutes during weekday afternoons", "expected": { "cron": "0,45 12-16 * * 1-5\n30 13,15 * * 1-5", "systemd": "Mon..Fri *-*-* 12..16:00/45:00" }, "got": { "cron": "0,45 12-16 * * 1-5", "systemd": "Mon..Fri *-*-* 12..16:00/45:00", "note": "45-min interval during weekday afternoons; expanded." }, "cron_exact": false, "systemd_exact": true, "cron_valid": true }, { "nl": "every other Wednesday at 7pm", "expected": { "cron": "0 19 * * 3", "systemd": "Wed *-*-* 19:00:00" }, "got": { "cron": "0 19 * * 3", "systemd": "Wed *-*-* 19:00:00", "note": "Cron cannot express 'every other Wednesday' \u2014 runs every Wednesday at 7pm, gate in script with week-of-year %2." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true }, { "nl": "sunset every Friday (7pm)", "expected": { "cron": "0 19 * * 5", "systemd": "Fri *-*-* 19:00:00" }, "got": { "cron": "0 19 * * 5", "systemd": "Fri *-*-* 19:00:00", "note": "'before bed' interpreted as 7pm." }, "cron_exact": true, "systemd_exact": true, "cron_valid": true } ] }