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
donePokud 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"
fiDalší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
fiKreativitě 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.