Bash Pagina 109: Diferență între versiuni

De la Wiki Linux Advanced
Sari la navigare Sari la căutare
 
 
(Nu s-au afișat 3 versiuni intermediare efectuate de același utilizator)
Linia 1: Linia 1:
== 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 <code>set -C; 2>/dev/null >~/manlocktest.lock</code> î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 <code>trap "rm -f ~/manlocktest.lock" EXIT</code> 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).
'''Mai clar...'''
Opțiunea ''set -C'' (sau ''set -o noclobber'') previne suprascrierea unui fișier existent atunci când redirecționezi ieșirea către acel fișier. În contextul scripturilor care folosesc fișiere de blocare, aceasta este utilă pentru a verifica dacă fișierul de blocare există deja și, dacă există, să nu fie suprascris.
Astfel, set -C permite ca linia:
set -C; 2>/dev/null >~/manlocktest.lock
să creeze fișierul doar dacă acesta nu există. Dacă fișierul de blocare ~/manlocktest.lock există deja, comanda va eșua, iar fișierul nu va fi suprascris. Aceasta semnalează scriptului că o altă instanță este deja în execuție, permițându-i să oprească rularea dacă detectează fișierul existent. Codul <code>2>/dev/null</code> previne afișarea mesajului de eroare că fișierul există deja.
'''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ă.






[[Bash_Pagina_108|Pagina anterioară]] | [[Bash_Pagina_110|Următoarea pagină]]
[[Bash_Pagina_108|Pagina anterioară]] | [[Bash_Pagina_110|Următoarea pagină]]

Versiunea curentă din 30 octombrie 2024 17:20

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).

Mai clar...

Opțiunea set -C (sau set -o noclobber) previne suprascrierea unui fișier existent atunci când redirecționezi ieșirea către acel fișier. În contextul scripturilor care folosesc fișiere de blocare, aceasta este utilă pentru a verifica dacă fișierul de blocare există deja și, dacă există, să nu fie suprascris.

Astfel, set -C permite ca linia:

set -C; 2>/dev/null >~/manlocktest.lock

să creeze fișierul doar dacă acesta nu există. Dacă fișierul de blocare ~/manlocktest.lock există deja, comanda va eșua, iar fișierul nu va fi suprascris. Aceasta semnalează scriptului că o altă instanță este deja în execuție, permițându-i să oprească rularea dacă detectează fișierul existent. Codul 2>/dev/null previne afișarea mesajului de eroare că fișierul există deja.


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ă.


Pagina anterioară | Următoarea pagină