Skip to content

Cronjob.de › Crontab reference › Monthly

Running a cron job once a month

For "on the 1st of every month at 3 am" the expression is 0 3 1 * *. The third field is the day of the month, the fourth the month. With * there, the job runs every month.

0 Minute 0-59
3 Hour 0-23
1 Day 1-31
* Month 1-12
* Weekday 0-7

Open and adjust in the crontab generator ›

Meaning

What the expression says exactly

The first two fields set the time, the third the day from 1 to 31. With 15 instead of 1 the job always runs on the 15th. The day of the week stays *.

The shorthand @monthly means 0 0 1 * *, on the 1st at midnight.

The next runs

  • Tue, 1 Dec 2026, 03:00
  • Fri, 1 Jan 2027, 03:00
  • Mon, 1 Feb 2027, 03:00
  • Mon, 1 Mar 2027, 03:00
  • Thu, 1 Apr 2027, 03:00

Calculated in German time when this page was loaded.

Variants

Similar schedules

0 6 1 * * On the 1st at 6 am, for example for invoices or a monthly report. Adjust
0 3 15 * * On the 15th of every month. Adjust
0 3 1,15 * * Twice a month, on the 1st and the 15th. Adjust
0 3 1 */3 * Quarterly: on 1 January, April, July and October. Adjust
0 3 1 1 * Once a year, on 1 January at 3 am. Adjust

Watch out for

Typical mistakes with this interval

The 31st does not come every month

A job with 31 in the day field only runs in the seven months that have 31 days. With 30, February is skipped. Cron does not move anything to the next possible day; the run simply does not happen.

The last day of the month

The standard crontab has no character for "last day". Linux cron does not understand the L from Quartz and some other schedulers. The usual way is to run the job on the 28th to 31st and check in the script whether tomorrow is the 1st. Often it is also enough to do the month-end work on the 1st just after midnight.

Monthly failures are noticed late

If a run fails, people often only notice when the invoice or report is missing. A notification on failure is especially worth it here. Cronjob.de offers it by email from Plus.

Own server

How it looks in the crontab

Open with crontab -e and add one line. The first starts a PHP script directly, the second calls an address. Replace paths and address with your own.

0 3 1 * * /usr/bin/php /pfad/zu/skript.php >/dev/null 2>&1
@monthly curl -fsS https://ihre-domain.de/cron.php >/dev/null

Without your own server

How it works at Cronjob.de

No command-line access needed: you enter the address of your script and click the schedule together. You can also type the expression above directly, or describe the interval in one sentence and have it suggested. Cronjob.de uses German time.

Five cronjobs are free forever, on the five-minute grid. One-minute intervals start with Plus. How to prepare a script on shared web space for this is explained in the web space guide.

FAQ

Common questions

What does @monthly mean?
The same as 0 0 1 * *: on the 1st of every month at midnight.
Can I run a job every other month?
Yes. 0 3 1 */2 * runs on 1 January, March, May, July, September and November.
Does the start of the month follow German time?
At Cronjob.de, yes. On a server set to UTC, 30 0 1 * * runs at 1:30 German time, or 2:30 in summer.

Create your cronjob now

Create an account, enter the address, click the schedule. Five cronjobs are free forever, the first 14 days run on the Unlimited plan.

Start for free To the crontab generator

More schedules

Also useful