60.16.1.1. Diskuse řešení

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.