DevToolBoxFREE
BlogAdvertise

Cron-Ausdruck Generator & Parser: Syntax, Beispiele & Code-Anleitung

17 Min. Lesezeitvon DevToolBox

Ob Sie Serverwartung automatisieren, Datenpipelines planen oder CI/CD-Workflows auslosen - der Cron-Ausdruck ist die universelle Sprache der zeitbasierten Aufgabenplanung. Ein Cron-Ausdruck-Generator hilft beim visuellen Erstellen, wahrend ein Cron-Parser kryptische Zeichenketten in lesbare Beschreibungen ubersetzt. Dieser Leitfaden deckt alles ab, von der Cron-Syntax bis zu praktischen Beispielen in JavaScript, Python, Bash und Cloud-Plattformen.

Testen Sie unser kostenloses Online-Tool zum Generieren und Parsen von Cron-Ausdrucken.

Was ist ein Cron-Ausdruck?

Ein Cron-Ausdruck ist eine kompakte Zeichenkette zur Definition wiederkehrender Zeitplane. Der Name stammt vom griechischen chronos (Zeit) und dem Unix-cron-Daemon. Cron ist zum Standard fur Aufgabenplanung geworden.

Im klassischen Unix-Crontab-Format besteht ein Cron-Ausdruck aus funf Feldern: Minute Stunde Tag Monat Wochentag. Jedes Feld akzeptiert Zahlen, Platzhalter, Bereiche, Listen und Schritte.

Heute werden Cron-Ausdrucke in Kubernetes CronJobs, GitHub Actions, AWS EventBridge und Vercel Cron verwendet. Das Verstandnis der Cron-Syntax ist fur jeden Entwickler unerlasslich.

Cron-Ausdruck-Syntax erklart

Der Standard-Cron-Ausdruck verwendet funf Felder. Jedes Feld stellt eine Zeiteinheit dar:

FeldWerteSonderzeichenBeschreibung
Minute0-59* , - /Ausfuhrungsminute
Stunde0-23* , - /Stunde (24h-Format)
Tag1-31* , - / ? L WTag des Monats
Monat1-12* , - /Monat des Jahres
Wochentag0-7* , - / ? L #Tag der Woche

Sonderzeichen: * passt auf alle Werte. Komma , trennt Listen. Bindestrich - definiert Bereiche. Schragstrich / definiert Schritte (z.B. */5 = alle 5 Minuten).

Das Format ist: * * * * * (Minute Stunde Tag Monat Wochentag). Dieses Funf-Felder-Muster ist das Herzstuck jeder Cron-Zeitplan-Definition.

Cron-Ausdruck-Beispieltabelle

Hier sind die haufigsten Cron-Ausdruck-Beispiele aus Produktionssystemen:

Cron-AusdruckBeschreibung
* * * * *Jede Minute
*/5 * * * *Alle 5 Minuten
0 * * * *Stundlich
0 0 * * *Taglich um Mitternacht
0 9 * * 1-5Werktags um 9 Uhr
0 0 1 * *Erster Tag jedes Monats

Codebeispiele fur Cron-Jobs

JavaScript / Node.js Cron-Jobs

Node.js bietet node-cron, cron, croner und Bree fur die Aufgabenplanung:

// ===== node-cron (most popular) =====
// npm install node-cron
const cron = require('node-cron');

// Run every 5 minutes
cron.schedule('*/5 * * * *', () => {
  console.log('Running task every 5 minutes');
  // Your task logic here
});

// Run weekdays at 9:00 AM
cron.schedule('0 9 * * 1-5', () => {
  console.log('Good morning! Running weekday task.');
}, {
  timezone: 'America/New_York'
});

// Validate a cron expression
console.log(cron.validate('*/5 * * * *')); // true
console.log(cron.validate('60 * * * *'));  // false

// ===== cron npm package =====
// npm install cron
const { CronJob } = require('cron');

const job = new CronJob(
  '0 */6 * * *',   // every 6 hours
  function () {
    console.log('Running every 6 hours');
  },
  null,             // onComplete
  true,             // start immediately
  'America/Chicago' // timezone
);

// ===== croner (modern, zero-dependency) =====
// npm install croner
import { Cron } from 'croner';

// Run every minute
const task = new Cron('* * * * *', () => {
  console.log('Tick every minute');
});

// Run at specific time, get next run
const next = task.nextRun();
console.log('Next execution:', next);

// Stop the job
task.stop();

// ===== Bree (worker-thread scheduler) =====
// npm install bree
const Bree = require('bree');

const bree = new Bree({
  jobs: [
    {
      name: 'backup',
      cron: '0 2 * * *',   // daily at 2 AM
      path: './jobs/backup.js'
    },
    {
      name: 'cleanup',
      cron: '0 0 * * 0',   // weekly on Sunday
      path: './jobs/cleanup.js'
    }
  ]
});

bree.start();

Python Cron-Planung

Python bietet schedule, APScheduler, python-crontab und Celery Beat:

# ===== schedule library (human-friendly) =====
# pip install schedule
import schedule
import time

def backup_database():
    print("Backing up database...")

def send_report():
    print("Sending daily report...")

schedule.every(5).minutes.do(backup_database)
schedule.every().day.at("09:00").do(send_report)
schedule.every().monday.at("08:30").do(send_report)

while True:
    schedule.run_pending()
    time.sleep(1)

# ===== APScheduler (enterprise-grade) =====
# pip install apscheduler
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.cron import CronTrigger

scheduler = BlockingScheduler()

# Using cron expression syntax
@scheduler.scheduled_job(CronTrigger.from_crontab('*/10 * * * *'))
def cleanup_temp_files():
    print("Cleaning temp files every 10 minutes")

# Using keyword arguments
@scheduler.scheduled_job('cron', hour=9, minute=0, day_of_week='mon-fri')
def weekday_report():
    print("Weekday report at 9:00 AM")

# First Monday of each month at 3 AM
@scheduler.scheduled_job('cron', day='1-7', day_of_week='mon', hour=3)
def monthly_audit():
    print("Monthly audit")

scheduler.start()

# ===== python-crontab (manage system crontab) =====
# pip install python-crontab
from crontab import CronTab

cron = CronTab(user='myuser')

# Create a new cron job
job = cron.new(
    command='/usr/bin/python3 /opt/app/backup.py >> /var/log/backup.log 2>&1'
)
job.setall('0 2 * * *')  # Daily at 2 AM
job.set_comment('Nightly database backup')
job.enable()

# List all cron jobs
for job in cron:
    print(f"{job.slices} -> {job.command}")

cron.write()  # Save changes

# ===== Celery Beat (distributed scheduling) =====
# pip install celery
# celeryconfig.py
from celery.schedules import crontab

beat_schedule = {
    'cleanup-every-hour': {
        'task': 'tasks.cleanup',
        'schedule': crontab(minute=0, hour='*/1'),
    },
    'weekly-report': {
        'task': 'tasks.send_report',
        'schedule': crontab(hour=9, minute=0, day_of_week=1),
    },
}

Bash / Linux Crontab-Befehle

Unter Linux/macOS: crontab -e zum Bearbeiten, crontab -l zum Auflisten:

# ===== Essential crontab commands =====

# Edit your user crontab
crontab -e

# List current cron jobs
crontab -l

# Remove all cron jobs (use with caution!)
crontab -r

# Edit another user's crontab (requires root)
sudo crontab -u www-data -e

# ===== Example crontab file =====
# Set environment variables at the top
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin
MAILTO=admin@example.com
TZ=UTC

# m h dom mon dow  command

# Backup database every night at 2 AM
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# Run cleanup every 15 minutes with flock
*/15 * * * * flock -n /tmp/cleanup.lock /opt/scripts/cleanup.sh

# Send report on weekdays at 9 AM
0 9 * * 1-5 /opt/scripts/daily-report.sh 2>&1 | logger -t daily-report

# Rotate logs on the 1st of each month
0 0 1 * * /usr/sbin/logrotate /etc/logrotate.conf

# Health check every minute (ping monitoring service)
* * * * * curl -fsS --retry 3 https://hc-ping.com/your-uuid > /dev/null

# ===== System crontab (/etc/cron.d/) =====
# /etc/cron.d/myapp (includes username field)
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin

# Note: system crontab includes a user field
*/5 * * * * www-data /opt/myapp/cron/process-queue.sh
0 3 * * * root /opt/myapp/cron/maintenance.sh

# ===== Logging best practices =====

# Log with timestamp
0 * * * * /opt/scripts/job.sh 2>&1 | while read line; do \
  echo "$(date '+\%Y-\%m-\%d \%H:\%M:\%S') $line"; \
done >> /var/log/myjob.log

# MAILTO for error notifications
MAILTO=ops-team@example.com
# Only errors are emailed (stdout goes to log, stderr to email)
0 */6 * * * /opt/scripts/etl.sh >> /var/log/etl.log

Cloud & CI/CD Cron-Planung

Cron-Ausdrucke werden in GitHub Actions, AWS EventBridge, Kubernetes CronJob und Vercel Cron verwendet:

# ===== GitHub Actions scheduled workflow =====
# .github/workflows/scheduled.yml
name: Scheduled Tasks
on:
  schedule:
    # Run every day at 6 AM UTC
    - cron: '0 6 * * *'
    # Run every Monday at 9 AM UTC
    - cron: '0 9 * * 1'
  workflow_dispatch: # Allow manual trigger

jobs:
  daily-task:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./scripts/daily-task.sh

---
# ===== AWS EventBridge (CloudWatch) cron =====
# Note: AWS cron has 6 fields (includes year)
# Format: minute hour day-of-month month day-of-week year

# Every 5 minutes
aws events put-rule \
  --name "every-5-min" \
  --schedule-expression "cron(*/5 * * * ? *)"

# Weekdays at 9 AM UTC
aws events put-rule \
  --name "weekday-morning" \
  --schedule-expression "cron(0 9 ? * MON-FRI *)"

# First day of each quarter
aws events put-rule \
  --name "quarterly" \
  --schedule-expression "cron(0 0 1 1,4,7,10 ? *)"

---
# ===== Kubernetes CronJob =====
# k8s-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: database-backup
spec:
  schedule: "0 2 * * *"           # Daily at 2 AM
  timeZone: "America/New_York"    # Available since k8s 1.27
  concurrencyPolicy: Forbid       # Prevent overlapping runs
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: backup
            image: myapp/backup:latest
            command: ["/bin/sh", "-c", "./backup.sh"]
            env:
            - name: DB_HOST
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: host
          restartPolicy: OnFailure

---
# ===== Vercel cron (vercel.json) =====
{
  "crons": [
    {
      "path": "/api/cron/daily-cleanup",
      "schedule": "0 0 * * *"
    },
    {
      "path": "/api/cron/hourly-sync",
      "schedule": "0 * * * *"
    },
    {
      "path": "/api/cron/weekly-report",
      "schedule": "0 9 * * 1"
    }
  ]
}

Erweiterte Cron-Funktionen

Viele Implementierungen erweitern die Syntax um ein Sekundenfeld (6 Felder) und ein Jahresfeld (7 Felder). Quartz, node-cron und Spring Framework unterstutzen diese erweiterten Formate.

Erweiterte Sonderzeichen: L = letzter, W = nachster Werktag, # = N-tes Vorkommen eines Wochentags.

Nicht-standardmasige Kurzformen: @reboot, @yearly, @monthly, @weekly, @daily, @hourly.

Cron-Job-Debugging und Uberwachung

Zeitzonen-Probleme: Setzen Sie immer TZ=UTC in Ihrer Crontab.

PATH-Probleme: Der Cron-Daemon verwendet eine minimale Umgebung. Verwenden Sie absolute Pfade.

Ausgabe nicht erfasst: Leiten Sie stdout und stderr immer in eine Log-Datei um.

Uberlappende Ausfuhrungen: Verwenden Sie flock zur Vermeidung.

Cron-Job Best Practices

Beschreibende Kommentare: Dokumentieren Sie jeden Crontab-Eintrag.

Ausgabeumleitung und Logging: In dedizierte Log-Dateien umleiten.

Gegenseitiger Ausschluss mit flock: Uberlappungen verhindern.

SHELL und PATH setzen: Umgebung explizit deklarieren.

Absolute Pfade: Uberall absolute Pfade verwenden.

Uberwachungsdienste: healthchecks.io oder Cronitor verwenden.

Zeitzonen-Bewusstsein: UTC verwenden und dokumentieren.

Haufig gestellte Fragen

Was bedeuten die funf Felder eines Cron-Ausdrucks?

Die funf Felder sind: Minute (0-59), Stunde (0-23), Tag des Monats (1-31), Monat (1-12), Wochentag (0-7). Jedes Feld akzeptiert Werte, Platzhalter (*), Bereiche, Listen und Schritte.

Was ist der Unterschied zwischen Cron und systemd Timern?

Cron ist der traditionelle Unix-Planer. Systemd Timer sind die moderne Alternative unter Linux: sie unterstutzen Ereignisse, behandeln verpasste Ausfuhrungen und integrieren sich in journalctl. Cron bleibt der Standard in der Cloud.

Wie fuhre ich einen Cron-Job alle N Minuten aus?

Verwenden Sie die Schritt-Syntax */N im Minutenfeld. Beispiele: alle 5 Minuten = "*/5 * * * *", alle 15 Minuten = "*/15 * * * *". Der Schrittwert sollte 60 teilen.

Verwandte Leitfaden:

Das Beherrschen von Cron-Ausdrucken ist fur jeden Entwickler unerlasslich. Nutzen Sie unser kostenloses Tool zum Generieren und Parsen.

Generieren und parsen Sie Cron-Ausdrucke mit unserem kostenlosen Tool.

War das hilfreich?

Stay Updated

Get weekly dev tips and new tool announcements.

No spam. Unsubscribe anytime.

Partner Picks

Sponsor this article

Place your product next to this developer topic with tracked clicks.

Ask about article sponsorship

This site uses cookies for analytics and to display ads. By continuing to browse, you agree. Privacy Policy