flock ist natürlich genial. 👍
Merci!
Für einfachste Ansprüche mache ich das jedoch mit mkdir...
mkdir schlägt fehl wenn das Verzeichnis schon existiert, und die Existenz eines Verzeichnisses sollte auch mehr oder weniger atomar sein.
Jo.
Man muss nur drauf achten daß das Script nicht zwischendurch aussteigt, also das Verzeichnis am Ende wieder weg ist. Sonst ist es blockiert bis man manuell eingreift.
Das kannst Du einfach regeln:
1 2 3 4 5 | dir=/tmp/mein-script-dings mkdir "$dir" || exit trap 'rmdir "$dir"' 0 echo Das hier läuft jetzt nur einmal. |
Das geht nur schief, wenn der Prozess mit kill -9
weggeschossen wird. Für das Szenario funktioniert flock
besser, weil da nicht die Shell etwas tun muss, sondern der Kernel die Dateideskriptoren schließt und damit das Lock freigibt.
Ansonsten lasse ich es auch einfach per screen laufen, dazu habe ich auch ein screen-manager Script in meinem GitHub, das verträgt zur Not auch interaktive Anwendungen die nur einmal laufen sollen.
Wie hilft screen
ein Skript nur ein Mal laufen zu lassen?