flock -x -w 5 ~/counter.txt 'COUNTER=$(cat ~/counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'
Wie würde ich mehrere Befehle flock
wie im obigen Beispiel übergeben?
Soweit ich weiß, werden flock
verschiedene Flags verwendet (-x für exklusiv, -w für Timeout), dann die zu sperrende Datei und dann der auszuführende Befehl. Ich bin nicht sicher, wie ich zwei Befehle an diese Funktion übergeben würde (Variable mit dem Inhalt der gesperrten Datei festlegen und diese Datei dann inkrementieren).
Mein Ziel hier ist es, ein etwas atomares Inkrement für eine Datei zu erstellen, indem es jedes Mal gesperrt wird, wenn ein Skript versucht, auf die counter.txt
Datei zuzugreifen .
quelle
Oder Sie können einen Dateideskriptor beflocken
Dies hat auch den Vorteil, dass Sie die Zählervariable im Gegensatz zu Subshell-basierten Ansätzen direkt verwenden können.
quelle
exec {counterfd}
? Allein Debian-Fehlernot found
, aber es gibt 0 mit der Umleitung zurück. Sehr komisch.Das
flock
Tool ist etwas schwierig zu bedienen und die Manpage ist ziemlich kurz. Die Manpage bietet drei Möglichkeiten, das Tool zu verwenden:flock [options] <file|directory> <command> [command args]
flock [options] <file|directory> -c <command>
flock [options] <file descriptor number>
Die Art und Weise, wie diese Frage formuliert ist, würde ich definitiv die dritte Form von verwenden
flock
. Wenn Sie weiter unten in der Manpageflock
nachsehen, finden Sie einige Beispiele, die die genaue Syntax für die Verwendung der dritten Form zeigen:Ich habe das hinzugefügt
#!/bin/bash
.Ich habe diese Form von erfolgreich verwendet
flock
.quelle