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: