Zurück zur Startseite

Wie verhindere ich das Cronjobs doppelt ausgeführt werden?

In vielen Projekten gibt es Cronjobs welche oft ausgeführt werden sollen. Diese haben meistens eine kurze Ausführungszeit. Allerdings kann die Laufzeit mit Wachsendem Datenbestand oder mehr Load auf dem Server zunehmen. Die kann dann dazu führen, dass der selbe Job mehrfach parallel ausgeführt wird.

Bei gewissen Jobs ist dieses Verhalten generell unerwünscht, bei anderen kann es zu Problemen führen wenn sich immer mehr Jobs welche weitere Last erzeugen und die Ausführungszeit der Jobs dadurch verlängern.

Mit dem Befehl flock ist es einfach möglich sicherzustellen, das ein Cronjob nur einmal gleichzeitig ausgeführt wird.

flock -n /tmp/lockfile.for.my.job -c "/mein/cron/job -mit -argumenten"

Mit der Option -n wartet flock nicht bis es den Lock erhält, sondern beendet sich ohne den Cronjob auszuführen. /tmp/lockfile.for.my.job ist der Pfad zum Lockfile für diesen Job. Für unterschiedliche Jobs sollten Sie unterschiedliche Lockfiles angeben, damit dies unabhängig voneinander sind. Mit der Option -c wird der Job übergeben der ausgeführt wird, wenn der Lock erfolgreich war.

Wird während der Job noch läuft ein neuer gestartet kann flock den Lock auf das Lockfile nicht erhalten und beendet sich. Wenn der Job fertig gelaufen ist wird der Lock auf das Lockfile wieder freigegeben und der nächste Aufruf des Cronjobs wird wieder ausgeführt.

Haben Sie die gewünschten Informationen nicht gefunden?

Kontaktieren Sie unseren Support:

+41 44 637 40 40 support@nine.ch