DevToolsmith

Cron Job Every Month

The cron expression 0 0 1 * * runs a job every month. Check its next run times below, then copy a ready-made line for crontab, Kubernetes, GitHub Actions, systemd or AWS.

Runs 100% in your browser — nothing is uploaded

Cron schedule

Schedule time zone

UTC

Cron expression for every month

0 0 1 * *

At 00:00, on day 1 of the month. It runs on 12 days a year.

Runs at midnight on the 1st of every month. @monthly is the same. Typical uses are invoices, monthly reports, rotating keys and archiving last month’s logs. Days 29–31 don’t exist in every month, which is why monthly jobs almost always use the 1st.

Field by field

FieldValueMatches
minute 0 0
hour 0 0
day of month 1 1
month * every value
day of week * every value

Examples

crontab

Run crontab -e and add:

0 0 1 * * /usr/local/bin/job.sh >> /var/log/job.log 2>&1

Kubernetes CronJob

apiVersion: batch/v1
kind: CronJob
metadata:
  name: my-job
spec:
  schedule: "0 0 1 * *"
  timeZone: "Etc/UTC"          # Kubernetes 1.27+
  concurrencyPolicy: Forbid    # skip a run if the last one is still going
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: job
              image: ghcr.io/acme/job:1.0
          restartPolicy: OnFailure

GitHub Actions

on:
  schedule:
    - cron: '0 0 1 * *'   # UTC

GitHub evaluates schedules in UTC, and runs can start several minutes late at busy times.

systemd timer

# /etc/systemd/system/job.timer
[Unit]
Description=Run job.service every month

[Timer]
OnCalendar=*-*-01 00:00:00
Persistent=true

[Install]
WantedBy=timers.target

Enable it with systemctl enable --now job.timer, and check the next runs with systemd-analyze calendar "*-*-01 00:00:00". Persistent=true runs a missed job after downtime, which cron can’t do.

AWS EventBridge

cron(0 0 1 * ? *)

EventBridge cron has six fields (the last is the year), uses ? in either the day-of-month or the day-of-week field, and numbers weekdays from 1 (Sunday) to 7. Rules run in UTC; EventBridge Scheduler also accepts a time zone.

Similar schedules: monthly and yearly

Have a different schedule? Paste any expression into the Cron Expression Generator, or browse all cron examples.

Sources

Spotted a mistake? Email hello@devtoolsmith.com and we’ll fix it.

Frequently asked questions

How do I run a cron job every month?

Use 0 0 1 * *. It means “At 00:00, on day 1 of the month”. It runs on 12 days a year.