GNU/Linux >> Linux Esercitazione >  >> Linux

Come assicurarsi che venga eseguita solo un'istanza di uno script Bash?

Sarebbe preferibile una soluzione che non richieda strumenti aggiuntivi.

Risposta accettata:

Quasi come la risposta di nsg:usa una directory di blocco . La creazione di directory è atomica sotto Linux e Unix e *BSD e molti altri sistemi operativi.

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

Puoi inserire il PID del blocco sh in un file nella directory di blocco per scopi di debug, ma non cadere nella trappola di pensare di poter controllare quel PID per vedere se il processo di blocco è ancora in esecuzione. Molte condizioni di gara giacciono su quel percorso.


Linux
  1. Filtro Rsync:copiare un solo pattern?

  2. Come rendere accessibile una directory condivisa tramite Sftp?

  3. Come posso assicurarmi che sia in esecuzione solo un'istanza di uno script Ruby alla volta?

  4. Qual è il modo migliore per garantire che sia in esecuzione solo un'istanza di uno script Bash?

  5. Come passare i parametri a uno script Bash?

Come verificare se esiste un file o una directory in Bash

Come scrivere uno script Bash con esempi

Bash Scripting Tutorial per principianti:cos'è, come scriverne uno ed esempi di script

Come verificare se un file o una directory esiste in Bash

Come eseguire uno script Bash

Come eseguire uno script bash tramite percorso assoluto?