Protože hotfolder musí kontrolovat adresář, existuje jen několik cest jak toho dosáhnout.
Prvním způsobem ja periodicky kontrolovat stav adresáře a podle zjištěných změn se rozhodnout který soubor zpracovat. Periodicita je zajištěna buďto spouštěním programu přes cron, nebo program funguje v nekonečné smyčce.
# Endless loop while true; do process_hotfolder sleep $INTERVAL done
Pokud spouštíme program z cronu, musíme vyřešit zámek. Zámek který zajistí aby se program nespustil vícekrát, pokud z takového konkurenčního spuštění hrozí nějaké nebezpečí.
if lockfile -r0 $LOCK; then process_hotfolder rm -f $LOCK else echo "HotFolder locked" fi
Dalším úkolem je vyřešit rozpoznávání souborů. Myslím tím ten správný okamžik kdy již můžeme soubor začít zpracovávat. Musíme mít na paměti, že pokud povolíme i jiný způsob umístnění souboru do adresáře než je příkazem mv, tedy způsob například příkazem cp. Druhý způsob může být znázorněn také programem který přímo zapisuje soubor do adresáře. Takový program může běžet delší dobu, například i několik minut.
Můžeme:
Po úvaze jsem zvolil první způsob. Tedy sledování času modifikace souboru. Tento způsob pro všechna nasazení které jsem zatím dělal plně vyhovoval. Princip je takový, že periodicky zkoumám obsah adresáře příkazem find a zajímám se o soubory jejich čas modifikace je starší než $SURETIME
.
soubory=$(find $HOTFOLDER -mmin +$SURETIME)
Při tomto způsobu mohou být soubory zpracovány v jiném pořadí než v jakém byly do hotfolderu vloženy. Opět, ve věech případech kdy jsem hotfolder použil to nebyl problém. Nicméně i tato záležitost jde řešit. Například takto
soubor=$(ls -tr|head -n1) if [[ -n "$soubor" ]]; then if [[ $(date +%F_%T -r $soubor) < $(date +%F_%T -d "3 mins ago") ]]; then zpracuj_soubor $soubor fi fi
Kreativitě se meze nekladou a možností je hodně.
Pokud není možné využít časové značky souboru, například proto že nemáme program jenž soubory umístňuje do adresáře pod úplnou kontrolou. Tento modifukuje časové značky způsobem jenž je pro nás velmi nešťastným. V takovém případě nezbyde než si detekci vložení souboru naprogramovat jiným způsobem. Například hlídáním kontrolních součtů souborů. Takové řešení ale vyžaduje pamatovat si mezi jednotlivými spuštěními našeho programu stav kontrolních součtů souborů a ukládat si jej. Můžeme mít databázi s takovouto strukturou.
soubor:čas:md5sum
Adresář pak procházíme a pro každý soubor v něm se rozhodneme podle souboru a jeho záznamu v databázi jestli záznam v databázi poopravíme a soubor zatím nezpracujeme. Nebo můžem soubor začít zpracovávat.