GNU/Linux >> Znalost Linux >  >> Linux

Jak se ujistit, že běží pouze jedna instance Bash skriptu?

Preferováno by bylo řešení, které nevyžaduje další nástroje.

Přijatá odpověď:

Téměř jako odpověď nsg:použijte lock adresář . Vytváření adresářů je atomické pod linuxem a unixem a *BSD a mnoha dalšími OS.

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

Můžete vložit PID zamykacího sh do souboru v adresáři lock pro účely ladění, ale nenechte se chytit do pasti a myslet si, že můžete zkontrolovat toto PID a zjistit, zda se proces zamykání stále provádí. Na této cestě leží spousta závodních podmínek.


Linux
  1. Jak zpřístupnit sdílený adresář pomocí Sftp?

  2. Jak rozdělit řetězec ve skriptu Bash

  3. Jaký je nejlepší způsob, jak zajistit, aby byla spuštěna pouze jedna instance skriptu Bash?

  1. Jak předat parametry skriptu Bash?

  2. Přidejte bash skript do cesty

  3. Jak zkontrolovat, zda soubor existuje v konkrétním adresáři ve skriptu bash?

  1. Filtr Rsync:Kopírování pouze jednoho vzoru?

  2. Jak spustit bash skript?

  3. Jak spustit bash skript přes absolutní cestu?