ich eine Klartextdatei als eine Task-Warteschlange für meine Anwendung verwenden möchten (für in einer Datenbank zu schreiben, obwohl das irrelevant ist), wobei gilt:atomar Entfernen der ersten Zeile einer Datei und Zurückkehren es
- ich hinzufügen ein Element in der Warteschlange über
echo "some task" >> task_queue.txt
- ich einen Artikel aus der Warteschlange
atomar entfernen Für 2. ich weiß nicht, einen Weg Rennbedingungen zu vermeiden, wenn ich Zugriff auf/task_queue.txt
in mehreren Threads oder Prozesse zu modifizieren . Das Folgende ist nicht atomar:
ITEM=`head -1 task_queue.txt`
sed -i '1d' task_queue.txt
# process the item in the application
Bietet Bash eine elegantere Möglichkeit, dies zu tun, als mit einer Sperrdatei? Ich habe noch nie zuvor flock
verwendet, also weiß ich nicht, ob das unordentlich ist (z. B. wenn die Verarbeitung der Task meiner Anwendung fehlschlägt).
Interessanter Ansatz, und ich wusste nicht über 'pgrep -f'. Ich frage mich, ob das besser ist als die Verwendung von Flock. Ich denke, ich muss beide Optionen gleichzeitig verfolgen und sehen, bei wem ich mich sicherer fühle. –
Hmmmm, ist es eigentlich nicht möglich, dass das "Zeug" im "if" -Körper den Dateideskriptor nicht die ganze Zeit festhält? 2 Befehle können einen kleinen Zeitraum haben, zwischen dem die Datei nicht geöffnet ist, was einem anderen Prozess erlauben könnte, sie zu stehlen. –
@ Sridhar-Sarnobat Es gibt offensichtlich eine Möglichkeit der Rassenkondition zwischen 'pgrep' und Operation in der Datei, was auch immer klein sein mag.Wenn Sie Präzision wünschen, sollten Sie sich den Verriegelungsmechanismus z.B. 'Herde'. – heemayl