[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: rsync med hook-möjlighet?



On 01/21/2014 04:59 PM, Anders Wallenquist wrote:
2014-01-04 09:46, Tore Ericsson skrev:
lördag 4 januari 2014 01:09 14 skrev  Martin Leben:
Hej!

Jag har en käll-katalog med en massa filer i en olika underkataloger. I
en destinations-katalog vill jag ha en exakt spegel av hur
käll-katalogen ser ut, fast jag vill att exempelvis alla bildfiler skall
skalas till en viss maximal storlek. (Detta för att sedan kunna
synkronisera destinations-katalogen till mobilen, som ju inte har hur
mycket lagringsutrymme som helst...)

Om filer i käll-katalogen vid senare körning inte längre existerar skall
motsvarande filer i destinations-katalogen raderas.


I korthet: Jag skulle alltså i princip vilka ha något som liknar rsync
med möjlighet att köra ett konverterings-skript eller liknande på varje
fil som kopierats.

Finns det något sådant? Eller är jag en drömare?

du är intresserad av inotify och incron, inotify är en trevlig
systemövervakare i kärnan som kan skicka ett meddelande när det händer
något i en katalog eller i en fil. Med incron kan du t ex knyta ett
skript som körs när en ny fil är lagrad i en katalog (t ex autmatiserad
bildskalning och kopiering till en annan katalog). Du kan använda incron
för ditt rsync-script som då bara körs när det skett ändringar i stället
för att köra det på tid med cron.

http://inotify.aiken.cz/

Mvh
Anders Wallenquist

Tack för hjälpen Anders, men det funkade inte så bra. incron såg initialt lovande ut, men sedan stötte jag på ett par problem:

1) incron kan inte att övervaka kataloger rekursivt. Efter lite övervägande är det ett problem jag kan leva med i just den tillämpning jag tänkt mig nu, men det är likafullt ett generellt problem.

2) incron får väldigt lätt maskinen att krokna genom att kommandot som man specificerat körs en gång för varje event, helt asynkront utan någon som helst kontroll av hur många anrop som gjorts. Man DOS:ar alltså sig själv. Jag testade just med att köra kommandot "convert" (imagemagick) för att skapa tumnaglar i en annan katalog av alla nya bildfiler som skapas i en övervakad katalog. Kopierade in 622 jpg-filer till den övervakade katalogen. Maskinen blev okontaktbar efter några sekunder. Loggfilen säger att det drogs igång 513 processer utan att en enda av dom ännu hade körts färdigt. Efter sju timmars sömn startade jag om maskinen, för den var fortfarande inte kontaktbar. Loggfilen sade att 590 av processerna aldrig kördes färdigt.

Det jag körde ser ut som nedan. (Lite förkortat dock.)


$ incrontab -l
/home/martin/bilder/2014 IN_DELETE,IN_CLOSE_WRITE,IN_MOVE /home/martin/bin/miniaturize-incron $@ $# $%


$ cat /bin/miniaturize-incron
...
srcfile="$1/$2"
dstfile=/home/martin/mirrors/anan/bilder/2014/$2
opcode="$3"
...
case "$opcode" in
  IN_DELETE|IN_MOVED_FROM)
    echo "\"$srcfile\" was deleted. Deleting \"$dstfile\"." >> $log
    if [ ! -f "$dstfile" ]; then
      echo "Error: \"$dstfile\" does not exist. Exiting." >> $log
    fi
    rm -v "$dstfile" >> $log 2>&1
    ;;

  IN_CLOSE_WRITE|IN_MOVED_TO)
    echo "\"srcfile\" was written. Converting to \"$dstfile\"." >> $log
    case $extension in
      bmp|jpg|gif|png)
        if $verbose; then
          verboseconvert="-verbose"
        fi
        convert "$srcfile" -resize 768x768\> "$dstfile" >> $log 2>&1
        ;;
      txt)
        cp "$srcfile" "$dstfile" >> $log 2>&1
        ;;
      *)
        echo "Info: Don't know how to handle \"$dstfile\"." >> $log
        ;;
    esac
    ;;

  *)
    echo "Error: Unknown op-code: $opcode" >> $log
    exit 1
    ;;
esac


Letar fortfarande fungerande lösning... Ska jag behöva leta efter eller göra en köhanterade för att hantera jobben som incron kör igång för att inte DOS:a den egna datorn?

:-/

Mvh
/Martin Leben


Reply to: