Warum bereinigt Flock die Sperrdatei nicht? [geschlossen]

13

Nachdem der Vorgang abgeschlossen ist, wird die Sperrdatei nicht gelöscht. Gibt es einen Grund, warum flockdie Datei aufbewahrt wird? Woher flockweiß man auch, ob ein Schloss erworben wurde?

Hier ist das Beispiel aus einer crontabDatei

* * * * * flock python <script_name>.py
Weg
quelle
Können Sie mehr Details, Code usw. geben
Romeo Ninov
Ich habe gesehen, wie Herde in einem Shell-Skript verwendet wurde. Die Aufgabe wird von cron ausgeführt. Wenn sie bereits ausgeführt wird, sollte sie nicht ausgeführt werden.
Wayfare
Es gibt verschiedene Methoden zum Sperren von Shell-Skripten. Können Sie bitte den relevanten Teil des Codes extrahieren und in Ihre Frage aufnehmen? (Idealerweise nur ein paar Zeilen, mit etwas ..., wo es angebracht ist.)
Roaima
Es ist wie Flock Python <Skriptname> .py Cron Eintrag ist so, dass dieser Job jede Minute ausgeführt wird. @roaima
Wayfare
1
Bitte geben Sie das nächste Mal die Informationen in Ihre Frage ein . Diesmal habe ich es für dich getan.
Roaima

Antworten:

15

Für die meisten Anwendungsfälle von flockist es sehr wichtig, dass die Sperrdatei nicht "bereinigt" wird. Stellen Sie sich ansonsten dieses Szenario vor:

  • Prozess A öffnet die Sperrdatei und stellt fest, dass sie nicht vorhanden ist. Daher wird sie erstellt.
  • Prozess A erwirbt die Sperre
  • Prozess B öffnet das Schloss (stellt fest, dass es bereits vorhanden ist)
  • Prozess B versucht, die Sperre zu erlangen, muss jedoch warten
  • Prozess A gibt die Sperre frei
  • Prozess B erhält die Sperre sofort
  • Prozess A löscht die Sperrdatei
  • Prozess C öffnet die Sperrdatei und stellt fest, dass sie nicht vorhanden ist. Daher wird eine neue erstellt. Beachten Sie, dass jetzt eine andere Sperrdatei geöffnet bleibt als die, die von Prozess B gesperrt wurde.
  • Prozess C versucht, die Sperre zu erlangen und ist erfolgreich ... aber er hätte warten müssen, da in Prozess B die Sperrdatei immer noch geöffnet und gesperrt ist.
Celada
quelle
Vielen Dank. Mir war nicht bewusst, dass die Herde darauf wartet, ein Schloss zu bekommen. Wissen Sie, ob es wie eine Warteschlange ist? Was passiert, wenn ich 10 Aufgaben habe, die für dieselbe Ressource gesperrt werden müssen?
Wayfare
3
@wayfare Was passiert, wenn 10 Prozesse auf dieselbe Ressource warten, ist implementierungsabhängig. Der wichtige Punkt ist, dass jeweils nur einer von ihnen diese Ressource erhalten kann.
Satō Katsura
@wayfare Herde, die darauf wartet, das Schloss zu bekommen, ist optional. Sie können auch verlangen, dass es sofort fehlschlägt, anstatt zu warten, falls die Sperre nicht verfügbar ist. Das gleiche Problem bleibt jedoch bestehen.
Celada
1
Wie können Sie dann die Verknüpfung der flockDatei sicher aufheben , wenn sich viele angesammelt haben?
user3019105
Sie müssen die Verknüpfung der Dateien zu einem Zeitpunkt aufheben, an dem Sie sicher sind, dass kein Sperrvorgang ausgeführt werden kann (z. B. eine Wartungsphase auf dem Server, in der alle relevanten Dienste heruntergefahren, cron deaktiviert usw. sind).
Thibaut Barrère