Das Skript inotifywait verursacht eine rekursive Schleife

Das Skript inotifywait verursacht eine rekursive Schleife

Ich habe ein inotifywait-Skript, das ein FTP-Upload-Verzeichnis überwacht und immer, wenn eine neue Datei hochgeladen wird, die richtigen Berechtigungen festlegt.

Ich mache das, weil der Remote-Client falsche Dateimodi erzwingt und das Verhindern, dass der FTP-Server Chmod-Befehle akzeptiert, dazu führt, dass der Remote-Client falsche Fehler ausspuckt.

mein letzter Ausweg ist also ein Inotify-Skript, das aber ein weiteres Problem verursacht. Hier ist es:

#!/bin/bash
inotifywait -mrq -e ATTRIB --format "%w%f" /home/user/upload/ | while read FILE; do 
  if [[ -f "$FILE" ]];then
    chown user:apache "$FILE" && chmod 640 "$FILE"
  fi
done

also meine Vermutung, dass hier Folgendes schief läuft: Sobald die Datei hochgeladen und vom Client mit CHMODifiziert wurde, wird die ATTRIB-Option ausgelöst (wie vorgesehen), aber das resultierende CHMOD in meinem eigenen Skript führt dazu, dass die ATTRIB-Option erneut ausgelöst wird ... was eine rekursive Schleife verursacht.

gibt es eine Möglichkeit, inotifywait klarzumachen, dass es seine eigenen Aktionen ignorieren soll, um diese Schleife zu verhindern?

Antwort1

Anstatt inotifywait„Warten auf“ zu haben -e attrib, sollten Sie „Warten auf“ haben -e modify.

   modify
   A watched file or a file within a watched directory was written to.

   attrib
   The metadata of a watched file or a file within a watched directory was modified.  This includes timestamps,  file permissions, extended attributes etc.

verwandte Informationen