Unabhängiger Vergleich · keine bezahlten Platzierungen
Startseite / Blog / Technik / Einen Cron sperren: Vermeiden Sie zwei identische Prozesse gleichzeitig

Einen Cron sperren: Vermeiden Sie zwei identische Prozesse gleichzeitig

Ein Cron, der sein Intervall überschreitet, eine Bereitstellung, die Mitarbeiter neu startet, ein schlecht verwalteter DST – ohne Sperre verdoppeln Sie Rechnungen, E-Mails oder Importe, ohne es zu merken.

Redaktion Hébergeurs.eu 4 Min. Aktualisiert 19 Juli 2026

Ihr Buchhaltungsexport-Cron wird „stündlich“ ausgeführt. Eines Morgens erhält die Buchhaltung zwei identische Dateien mit doppelten Einträgen. Digging: Der Job um 08:00 Uhr war noch nicht beendet, als der Job um 09:00 Uhr startete – dasselbe Skript, dieselbe temporäre Tabelle, kein Mutex.

Auf einem einzelnen VPS ist es klassisch. Bei einer skalierenden Infrastruktur ist es noch schlimmer: Zwei Server führen dieselbe Crontab aus, weil niemand den Scheduler zentralisiert hat.

Warum sich Crons überschneiden

UrsacheSzenarioSymptom
Job zu langImportieren > IntervallDuplikate, Deadlocks DB
Manueller NeustartAdmin+cronZwei parallele Prozesse
Multiservercrontab auf 2 VPS kopiertDoppelte Rechnungsstellung gegenüber Kunden
Host erneut versuchenZeitüberschreitung PHP töten + neu startenTeilweises Commit × 2

Ein Cron ist standardmäßig nicht „idempotent“ – Sie müssen es beweisen oder sperren.

flock: Dateisperre auf einem einzelnen Host

„Bash

  • flock -n /var/lock/sync.lock /usr/local/bin/sync.sh >> /var/log/sync.log 2>&1

- „-n“: nicht blockierend – überspringen, wenn die Sperre belegt ist (vorzugsweise einer unendlichen Warteschlange).

– Sperre auf **lokaler Festplatte**, die von mehreren Benutzern gemeinsam genutzt wird – kein NFS instabil für kritische Sperren.



PHP-Alternative:



$fp = fopen('/var/lock/job.lock', 'c'); if (!flock($fp, LOCK_EX | LOCK_NB)) { Ausgang(0); } // Arbeit...


:::Hinweis

**Denken Sie daran.** Flock schützt einen Server. Sobald Sie zwei Knoten oder einen Warteschlangen- und Cron-Worker haben, wechseln Sie zu einer verteilten Sperre oder einem einzelnen Job-Orchestrator.

:::



## Verteilte Sperre: Redis und PostgreSQL



**Redis** (kurzes Muster, TTL erforderlich):



SET lock:export $(uuid) NX EX 3600


Geben Sie mit dem Lua-Vergleichs- und Löschskript frei, um zu vermeiden, dass die Sperre von einem anderen Prozess entfernt wird.



**PostgreSQL-Advisory-Sperre** – nützlich, wenn der Job bereits Auswirkungen auf die Datenbank hat:



„sql

SELECT pg_try_advisory_lock(12345);

Die Sperre wird am Ende der Sitzung freigegeben – nützlich für lange SQL-Jobs.

Architektur: Cron-Trigger vs. einzelner Worker

Für schwere Aufgaben gibt es nur Cron-Warteschlangen:

  1. Cron-Minute → Job-ID in die Redis-Warteschlange verschieben.
  2. Nur ein Worker-Consumer verarbeitet die Warteschlange.
  3. Timeout-Sichtbarkeit der Nachricht bei einem Absturz.

Laravel Horizon, Sidekiq, Celery schlagen – dasselbe Prinzip. Der Cron wird zu einem Weckruf, nicht zur Ausführung selbst.

Überwachung und Protokolle

Protokollanfang und -ende mit PID, Dauer und Status. Korrelieren Sie mit Datenbankmetriken – Deadlocks und doppelte Zeilen sind oft das erste Signal. Überprüfen Sie bei Shared die Zeitzone des Servers und die PHP-Grenzwerte, bevor Sie den Code festschreiben.

Der Gipfel: Idempotenz ersetzt das Schloss nicht – sie ergänzt es

Die beiden veranstalten zusammen die Nacht des Black Friday.

Entscheide dich und gehe ohne blinden Fleck voran

Überwachen Sie jeden geplanten Cron: Vergleichen Sie die beobachtete maximale Dauer mit dem konfigurierten Intervall. Fügen Sie Flock sofort zu jedem Einzelknoten-VPS hinzu. Zentralisieren Sie den Scheduler, wenn Sie über mehrere Server verfügen – einen einzelnen Cron-Knoten oder eine gemeinsame Redis-Sperre. Protokollieren Sie Anfang und Ende mit der PID, um Duplikate zu korrelieren. Informationen zu Cron- und PHP-Limits je nach Angebot finden Sie in unserem Hosting-Leitfaden.

Häufig gestellte Fragen

Reicht Flock aus, um einen Cron-Bash zu sperren?

Ja auf einem einzelnen Server: flock -n /var/lock/myjob.lock /path/script.sh verhindert eine zweite gleichzeitige Instanz. Die Sperre verschwindet, wenn der Prozess abbricht. Stellen Sie sicher, dass das Skript nicht gegabelt wird, ohne die Sperre aufzuheben.

Wie sperre ich einen Cron auf mehreren Servern?

Verwenden Sie eine verteilte Sperre: Redis SET NX EX, PostgreSQL-Advisory-Sperre oder DynamoDB-Sperre. Flock funktioniert nicht zwischen Maschinen.

Was tun, wenn der vorherige Job länger als das Cron-Intervall dauert?

Erhöhen Sie entweder das Intervall oder erlauben Sie das Überspringen (flock -n, das 0 beendet) oder stellen Sie den Job in die Warteschlange (einzelner Worker). Lassen Sie niemals zu, dass sich zwei große Importe überschneiden.

Haben geteilte Crons bestimmte Fallstricke?

Ja: Serverzeit im Vergleich zur Ortszeit, unterschiedliche PHP-Pfade, Timeout für stilles Killen und mehrere Knoten ohne Koordination, wenn der Host die Infrastruktur skaliert, ohne es Ihnen mitzuteilen.


Ein Cron ohne Sperre ist wie Roulette: An einem Tag wird die Aufgabe zweimal abgeschlossen – an dem Tag, an dem Sie nicht auf die Protokolle schauen.

Europäische Hoster vergleichen

Filtern nach Compliance, Standort und Einsatzzweck — dann die Datenblätter öffnen, um den echten Umfang zu prüfen.

Verzeichnis durchsuchen
Blog

Weiterlesen

Alle Artikel →