correct application of playlists rules
This commit is contained in:
50
program1/append_with_lock.sh
Normal file
50
program1/append_with_lock.sh
Normal file
@@ -0,0 +1,50 @@
|
||||
# Fonction pour ajouter une ligne à un fichier avec verrouillage (bloquant + timeout + gestion des signaux)
|
||||
append_with_lock() {
|
||||
local line="$1"
|
||||
local file="$2"
|
||||
local lock_dir="/tmp/dancevideos_moved_files.lock"
|
||||
local timeout=30 # Timeout en secondes (ajustable)
|
||||
local start_time=$(date +%s)
|
||||
local got_lock=false
|
||||
|
||||
# Fonction de nettoyage du verrou (appelée en cas de signal ou de sortie)
|
||||
cleanup_lock() {
|
||||
if [ -d "$lock_dir" ]; then
|
||||
rmdir "$lock_dir" 2>/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
# Piège les signaux d'interruption pour libérer le verrou
|
||||
trap cleanup_lock INT TERM EXIT
|
||||
|
||||
# Attendre le verrou avec timeout
|
||||
while true; do
|
||||
# Vérifier le timeout
|
||||
local current_time=$(date +%s)
|
||||
if [ $((current_time - start_time)) -ge $timeout ]; then
|
||||
echo "Timeout atteint pour l'obtention du verrou sur $file" >&2
|
||||
trap - INT TERM EXIT # Désactive le piège pour éviter un nettoyage double
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Tentative de verrouillage
|
||||
if mkdir "$lock_dir" 2>/dev/null; then
|
||||
got_lock=true
|
||||
break
|
||||
else
|
||||
sleep 0.1 # Attendre avant de réessayer
|
||||
fi
|
||||
done
|
||||
|
||||
# Écriture dans le fichier (si verrou obtenu)
|
||||
if $got_lock; then
|
||||
set -x
|
||||
echo "$line" >> "$file"
|
||||
echo "$line" >> "$file" # write them twice because of bug where a line is skipped
|
||||
set +x
|
||||
# Libérer le verrou
|
||||
rmdir "$lock_dir"
|
||||
trap - INT TERM EXIT # Désactive le piège après utilisation
|
||||
fi
|
||||
}
|
||||
export -f append_with_lock
|
||||
Reference in New Issue
Block a user