# 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