# Cronjobs einrichten und verwalten

Source: https://support.kapsulehost.com/de-de/cron-jobs

A cron job führt einen Befehl nach einem Zeitplan im Hintergrund aus, unabhängig davon, ob jemand Ihre Website besucht. Dieser Leitfaden behandelt das Hinzufügen eines Jobs in KPanel, das korrekte Schreiben des Zeitplans und des Befehls für diese Plattform, das Ersetzen von WordPress' unzuverlässigem eingebauten Scheduler sowie das Auffinden der Ausgabe, wenn ein Job nicht das tut, was Sie erwartet haben.

## Wo sich Cron in KPanel befindet

Cron gehört zu einer Website, daher erreichen Sie es über die Website und nicht über das Hauptmenü:

1. Melden Sie sich bei [KPanel](https://kpanel.kapsulehost.com) an und klicken Sie in der linken Seitenleiste auf **Websites**.
2. Klicken Sie auf die gewünschte Website.
3. Öffnen Sie im eigenen Menü der Website **Einstellungen** und dann **Cron**.

Die direkte Adresse lautet `/websites/<site-id>/cron`. Sie sehen eine Tabelle mit bestehenden Jobs oder, falls die Website noch keine hat, einen leeren Zustand.

![Die Cron-Seite für eine Website in KPanel, auf der die geplanten Jobs dieser Website aufgelistet sind](https://support.kapsulehost.com/help/screenshots/cron-jobs.13aef775.webp)

## Einen Job hinzufügen

Klicken Sie oben rechts auf **Cron-Job hinzufügen**. Das Formular hat drei Felder.

### Zeitplan

Sechs voreingestellte Schaltflächen füllen den Ausdruck für Sie aus:

| Schaltfläche | Ausdruck |
|---|---|
| Jede Minute | `* * * * *` |
| Alle 5 Min. | `*/5 * * * *` |
| Jede Stunde | `0 * * * *` |
| Täglich 2 Uhr | `0 2 * * *` |
| Wöchentlich Sonntag | `0 2 * * 0` |
| Monatlich 1. | `0 2 1 * *` |

Oder geben Sie Ihren eigenen Ausdruck in **Cron-Ausdruck** ein. Die fünf Felder lauten in dieser Reihenfolge: Minute, Stunde, Tag des Monats, Monat, Wochentag:

```
minute  hour  day-of-month  month  day-of-week
```

- `0 3 * * *` läuft jeden Tag um 3:00 Uhr.
- `*/15 * * * *` läuft alle fünfzehn Minuten.
- `0 9 * * 1` läuft jeden Montag um 9:00 Uhr.
- `30 1 1 * *` läuft am Ersten jedes Monats um 1:30 Uhr.
- `0 */6 * * *` läuft alle sechs Stunden, jeweils zur vollen Stunde.

### Bezeichnung

Ein Name, den Sie später wiedererkennen, zum Beispiel `WordPress cron` oder `Nightly stock sync`. Er wird Ihnen in der Jobtabelle angezeigt, machen Sie ihn also aussagekräftig: `job 3` hilft niemandem um 2 Uhr nachts.

### Befehl

Der auszuführende Shell-Befehl. Klicken Sie auf **Save**, um den Job zu erstellen.

> **Warning:** Verwenden Sie vollständige Pfade. Cron läuft mit einer minimalen Umgebung und ohne Ihr Shell-Profil, sodass ein nackter `php` oder ein relatives Verzeichnis, das funktioniert, wenn Sie über SSH angemeldet sind, hier stillschweigend fehlschlägt. Schreiben Sie jedes Mal den vollständigen Pfad aus.

## Den Befehl schreiben

Jobs laufen unter dem eigenen Systembenutzer Ihrer Website, daher ist Ihr Home-Verzeichnis der richtige Ankerpunkt, und `~` wird korrekt aufgelöst. Die Dateien Ihrer Website befinden sich unter:

```
~/htdocs/yourdomain.co.nz
```

Den genauen Pfad können Sie auf dem Tab **Einstellungen** und dann **SFTP** der Website bestätigen, wo er unter **Website-Dateien** angezeigt wird.

Typische Befehle:

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
```

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/php bin/send-queued-emails.php
```

```
/usr/bin/curl -fsS https://yourdomain.co.nz/api/nightly-report
```

> **Tip:** Testen Sie den Befehl, bevor Sie ihn planen. Fügen Sie ihn in den Bereich **WordPress** und dann **Console** der Website ein, wenn es sich um einen `wp`-Befehl handelt, oder führen Sie ihn über SSH aus. Ein Job, der ohnehin nie funktioniert hätte, lässt sich an der Eingabeaufforderung viel leichter erkennen als um 3 Uhr nachts in einer Protokolldatei.

## Ersetzen von WordPress' eingebautem Scheduler

WordPress wird mit seinem eigenen Pseudo-Scheduler, WP-Cron, ausgeliefert, der nur ausgelöst wird, wenn jemand eine Seite lädt. Auf einer ruhigen Website werden geplante Beiträge zu spät veröffentlicht und E-Mails stauen sich unversendet. Auf einer stark frequentierten Website zahlt jeder Besucher die Kosten für die Überprüfung des Zeitplans.

Ein echter cron job behebt beides. KPanel übernimmt den gesamten Wechsel für Sie:

1. Öffnen Sie die Website und dann den Tab **WordPress**.
2. Öffnen Sie den Bereich **WP-Cron**.
3. Klicken Sie auf **System-Cron aktivieren**.

Das fügt einen Zeitplan hinzu, der WP-Cron alle fünf Minuten ausführt, und setzt `DISABLE_WP_CRON`, sodass Seitenaufrufe es nicht mehr zusätzlich auslösen. **System-Cron entfernen** auf demselben Bildschirm macht beide Teile wieder rückgängig.

Wenn Sie es lieber manuell erledigen möchten, sind es zwei Schritte:

**Die besucherausgelöste Version deaktivieren.** Fügen Sie dies zu `wp-config.php` hinzu, oberhalb der Zeile `/* That's all, stop editing! */`, mithilfe von **Einstellungen** und dann **Dateimanager**:

```php
define( 'DISABLE_WP_CRON', true );
```

**Den echten Job hinzufügen.** Unter **Einstellungen** und dann **Cron**:

- Zeitplan: `*/5 * * * *`
- Bezeichnung: `WordPress cron`
- Befehl: `cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now`

> **Warning:** Überspringen Sie nicht die `DISABLE_WP_CRON`-Hälfte. Wenn beide laufen, kann jede geplante Aufgabe doppelt ausgelöst werden: doppelte E-Mails, doppelte Bestellverarbeitung, doppelte Abbuchungen bei einem Abonnement-Plugin. Verwenden Sie die Ein-Klick-Aktion im WP-Cron-Bereich, dann kann Ihnen das nicht passieren.

## WooCommerce und Hintergrundwarteschlangen

WooCommerce verwendet eine Hintergrundwarteschlange für Bestellstatusänderungen, Abonnementverlängerungen, E-Mails und Lagerbestandsaktualisierungen. Es stützt sich auf WP-Cron und ist damit genau die Arbeitslast, die auf einem ruhigen Shop leidet.

Sobald der echte Zeitplan eingerichtet ist, wird die Warteschlange alle fünf Minuten verarbeitet. Beobachten Sie dies unter **WooCommerce**, dann **Status**, dann **Scheduled Actions** im wp-admin.

Ein Shop mit hohem Volumen kann auf `*/2 * * * *` umsteigen. Darunter zu gehen hilft selten: Sie verbringen mehr Zeit mit dem Starten von Prozessen als mit der eigentlichen Arbeit. Siehe [Einrichten von WooCommerce](https://support.kapsulehost.com/de-de/wordpress-woocommerce).

## Bestehende Jobs verwalten

Die Jobtabelle zeigt **Label**, **Schedule**, **Command**, **Letzte Ausführung** und **Status**, mit zwei Aktionen pro Zeile:

- **Disable** pausiert einen Job, ohne ihn zu löschen, und wird zu **Enable**, um ihn wieder zu aktivieren. Verwenden Sie dies, wenn Sie testen, ob ein Job ein Problem verursacht.
- **Delete** entfernt ihn dauerhaft. Sie werden zur Bestätigung aufgefordert, und geplante Ausführungen stoppen sofort.

> **Important:** Das Löschen eines cron job kann nicht rückgängig gemacht werden. Der Zeitplan wird sofort vom Server entfernt. Wenn Sie ihn nur vorübergehend anhalten möchten, verwenden Sie **Disable**.

## Die Ausgabe finden

Bei jedem Job, den KapsuleHost erstellt, wird die Ausgabe für Sie erfasst. Standardausgabe und Fehler werden an eine Protokolldatei in einem `cron-logs`-Verzeichnis im Home-Verzeichnis des Website-Benutzers angehängt, eine Datei pro Job.

Dieses Protokoll beantwortet fast jede Frage der Art „Wurde mein Job ausgeführt?", denn es zeichnet auf, was der Befehl ausgegeben hat und welchen Fehler er gegebenenfalls verursacht hat.

Um es zu lesen, verbinden Sie sich über SSH und schauen Sie in `~/cron-logs/`. SSH verwendet eine Schlüssel-Authentifizierung, fügen Sie daher zuerst Ihren öffentlichen Schlüssel über den Tab **Einstellungen** und dann **SSH-Schlüssel** der Website hinzu: siehe [Hinzufügen von SSH-Schlüsseln](https://support.kapsulehost.com/de-de/adding-ssh-keys).

> **Note:** Der Dateimanager und die SFTP-Konten sind auf Ihr Website-Verzeichnis beschränkt, `~/htdocs/yourdomain.co.nz`, und `cron-logs` liegt eine Ebene darüber. Das ist Absicht: Es hält einen Auftragnehmer mit SFTP-Zugriff von allem außer der Website fern. Nutzen Sie natives SSH, um auf die Protokolle zuzugreifen, oder leiten Sie die Ausgabe wie unten gezeigt in Ihr Website-Verzeichnis um.

Wenn Sie die Ausgabe lieber an einem Ort haben möchten, den der Dateimanager öffnen kann, leiten Sie sie selbst um:

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now >> ~/htdocs/yourdomain.co.nz/wp-content/cron.log 2>&1
```

`2>&1` sendet Fehler in dieselbe Datei wie die normale Ausgabe. Ohne diesen Zusatz gehen Fehler ins Leere.

> **Warning:** Alles innerhalb Ihres Website-Verzeichnisses kann potenziell über das Web abgerufen werden. Legen Sie ein umgeleitetes Protokoll unter `wp-content` ab statt im Stammverzeichnis der Website, geben Sie ihm einen Namen, den niemand erraten würde, und löschen Sie es, sobald Sie mit der Fehlersuche fertig sind.

## Gute Praxis

- **Staffeln Sie Ihre Zeitpläne.** Sechs Jobs, die alle auf `0 2 * * *` gesetzt sind, starten alle gleichzeitig. Verteilen Sie sie: `0 2`, `10 2`, `20 2`.
- **Verwenden Sie „jede Minute" nicht, außer Sie benötigen es wirklich.** `*/5` reicht für fast alles, einschließlich WordPress und WooCommerce.
- **Halten Sie Jobs kurz.** Ein Job, der länger als sein Intervall dauert, überschneidet sich mit dem nächsten Durchlauf.
- **Leiten Sie die Ausgabe bei allem Lauten um**, damit ein geschwätziger Job nicht Ihre Festplatte füllt.
- **Überprüfen Sie die Liste gelegentlich.** Jobs, die von einem entfernten Plugin zurückgeblieben sind, laufen weiter.

## Fehlerbehebung

**Der Job scheint nie zu laufen.** Prüfen Sie zuerst den Pfad. Öffnen Sie die Protokolldatei. Bestätigen Sie dann, dass der Status **Active** und nicht **Disabled** ist. Führen Sie dann denselben Befehl über SSH aus und sehen Sie, was er ausgibt.

**„command not found" im Protokoll.** Ein fehlender vollständiger Pfad. Verwenden Sie `/usr/bin/php`, `/usr/bin/wp`, `/usr/bin/curl` anstelle des nackten Namens.

**Zugriff verweigert.** Der Job läuft unter dem Systembenutzer Ihrer Website. Dieser Benutzer muss alles, was der Befehl berührt, besitzen oder zumindest lesen können. Überprüfen Sie die Berechtigungen unter [Verwendung des Dateimanagers](https://support.kapsulehost.com/de-de/file-manager).

**WordPress-Aufgaben laufen immer noch zu spät.** Bestätigen Sie, dass beide Hälften des Wechsels vorhanden sind: Der Zeitplan existiert unter **Einstellungen** und dann **Cron**, und `DISABLE_WP_CRON` ist gesetzt. Der Bereich **WP-Cron** im Tab **WordPress** zeigt den aktuellen Status beider an.

**Der Job läuft, aber die Website ist währenddessen langsam.** Verschieben Sie ihn auf eine ruhigere Stunde oder teilen Sie die Arbeit in kleinere Abschnitte auf. Die Ressourcennutzung auf Website-Ebene ist unter **Leistung** sichtbar: siehe [Verbesserung der Website-Geschwindigkeit](https://support.kapsulehost.com/de-de/website-speed).

**Ein Job hat nach einem Plugin-Update aufgehört zu funktionieren.** Der Befehlspfad könnte sich geändert haben. Überprüfen Sie das Protokoll und aktualisieren Sie dann den Befehl in der Jobtabelle, indem Sie den alten Job löschen und einen korrigierten hinzufügen.
