Bash Pagina 109
Crearea unui fișier de blocare de bază
Un fișier de blocare de bază este creat pentru a preveni rularea simultană a mai multor instanțe ale unui script. Existența fișierului de blocare servește drept semnal pentru alte instanțe ale scriptului să nu ruleze. La ieșire, scriptul șterge fișierul de blocare, permițând astfel unei noi instanțe să verifice dacă este sigur de executat.
Cod Exemplu
#!/bin/bash # Verifică dacă fișierul de blocare există; dacă nu, îl creează și setează capcana pentru ștergere la ieșire. if (set -C; 2>/dev/null >~/manlocktest.lock); then # Setează capcana pentru a șterge fișierul de blocare la ieșirea din script trap "rm -f ~/manlocktest.lock" EXIT # Scenariul principal începe aici echo "Sunt un scenariu și fac ceva, orice." sleep 30
else
echo "Fișier de blocare există... ieșire" exit 1
fi
Explicație
Verificarea fișierului de blocare: Secvența set -C; 2>/dev/null >~/manlocktest.lock
încearcă să creeze fișierul de blocare. Dacă fișierul există deja, operația eșuează, și astfel scriptul sare la secțiunea else, unde oprește execuția.
Capcana (trap): Linia trap "rm -f ~/manlocktest.lock" EXIT
setează o capcană pentru a șterge fișierul de blocare când scriptul se încheie, asigurând astfel că fișierul este eliminat chiar dacă scriptul se termină prematur.
Funcționarea scenariului principal: După ce a creat cu succes fișierul de blocare, scriptul afișează un mesaj și rulează instrucțiuni suplimentare (în acest caz, un somn de 30 de secunde).
Observații
Acest tip de blocare simplă este foarte util pentru a evita conflictele în rularea scripturilor și asigură că doar o instanță a scriptului poate rula la un moment dat.
Acest cod oferă o structură clară pentru crearea unui fișier de blocare și ștergerea lui automată la ieșirea din script, prevenind astfel execuția paralelă nedorită.