Anzi tutto, dove le mettiamo? Le camere piazzano le immagini (bmp) in una directory condivisa, in una struttura tipo
- directorycondivisa
---- seriecamere
---------- ok
---------- ko
mettendole in ok e ko (servono per dei controlli dimensionali). Il NAS non è un mostro di potenza, e allora ho deciso di usare prima bash e python, poi, stressato dalle procedure del Qnap, solo in bash. Esisteranno due file, capgo e caprun. Capgo è quello che gestisce tutto, appoggiandosi ad inotifywait (è presente nel pacchetto inotify-tools). CapRun viene lanciato ogni 10 minuti, e se non trova CapGo in esecuzione, lo esegue (potrebbe essere crashato, ricordate chi l'ha scritto).
#!/bin/sh
# capgo
function procfile {
mydir=`dirname "$1"`
myfile=`basename "$1"`
extension=${myfile##*.}
mould=${mydir##$percorso}
mould=`echo $mould | tr "/" "-"`
newname=`date +"%Y%m%d-%H%M%S-%N"`"-$mould."$extension
deleteolds "$mydir"
#
if [ -f "$1" ]; then
mv "$1" "$mydir"/"$newname"
fi
}
#
function deleteolds {
maxfiles=100
roundfiles=20
gofiles=$(($maxfiles + $roundfiles))
fcount=`ls -1 $1 | wc -l`
if [ $fcount -gt $gofiles ]; then
ls -t "$1" | tail -n$roundfiles | while read line; do delfile "$1"/"$line"; done
fi
}
#
function delfile {
if [ -f "$1" ]; then
rm "$1"
fi
}
# -------------------------------------------------------------------------
percorso="/share/camere/"
cd "$percorso"
inotifywait -m -r --format '%w%f' -e close_write "$percorso" | while read line
do
if [ -f "$line" ]; then
procfile "$line"
fi
done
Il NAS mi ha stressato alla grande con gli autorun, le installazioni e i pacchetti aggiuntivi, Optware e ipkg, quindi, come dicevo, eseguo con cron il controllo dell'esecuzione del programma. Qui uso ps per controllare la situazione dell'altro eseguibile. Nota: gli square bracket dopo il grep, in questo caso, non sarebbero necessari, ma sarebbero utili nel caso volessi visionare eseguendolo lo stesso script, in autocontrollo!
#!/bin/sh
s=`ps aux | grep "[c]apgo"`
size=${#s}
if [ $size -gt 0 ]; then
echo "CapGo e' gia' in esecuzione"
exit 0
fi
echo "Eseguo CapGo..."
/usr/bin/capgo &
Non capendo comunque molto di come funzionano questi modelli di NAS, in ogni caso, mi sembra che ci sia un'aleatorietà non da poco in quello che facciamo, com'è possibile che un programma a volte venga eseguito e a volte no? E certo, dovrei leggere meglio i manuali :-)