GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man sicherstellen, dass nur eine Instanz eines Bash-Skripts ausgeführt wird?

Eine Lösung, die keine zusätzlichen Tools erfordert, wäre vorzuziehen.

Akzeptierte Antwort:

Fast wie die Antwort von nsg:Verwenden Sie ein Sperr-Verzeichnis . Die Verzeichniserstellung ist unter Linux und Unix und *BSD und vielen anderen Betriebssystemen atomar.

if mkdir $LOCKDIR
then
    # Do important, exclusive stuff
    if rmdir $LOCKDIR
    then
        echo "Victory is mine"
    else
        echo "Could not remove lock dir" >&2
    fi
else
    # Handle error condition
    ...
fi

Sie können die PID des sperrenden sh zu Debugging-Zwecken in eine Datei im lock-Verzeichnis einfügen, aber tappen Sie nicht in die Falle, dass Sie diese PID überprüfen können, um zu sehen, ob der Sperrprozess noch ausgeführt wird. Viele Rennbedingungen legen diesen Weg fest.


Linux
  1. Rsync-Filter:Nur ein Muster kopieren?

  2. Wie debuggt man ein Bash-Skript?

  3. Wie kann man ein freigegebenes Verzeichnis per Sftp zugänglich machen?

  4. Warum kann ich Cd nicht in einem Bash-Skript verwenden?

  5. Wie übergebe ich Parameter an ein Bash-Skript?

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So schreiben Sie ein Bash-Skript mit Beispielen

Bash-Skripting-Tutorial für Anfänger:Was es ist, wie man eines schreibt und Skriptbeispiele

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So führen Sie ein Bash-Skript aus

Wie führe ich ein Bash-Skript über einen absoluten Pfad aus?