Sto scrivendo script di shell in cui abbastanza regolarmente alcune cose vengono scritte su un file , dopo di che viene eseguita un'applicazione che legge quel file. Trovo che attraverso la nostra azienda la latenza della rete sia molto diversa, quindi un semplice sleep 2
per esempio non sarà abbastanza robusto.Come gestire la latenza NFS negli script di shell
ho cercato di scrivere un (configurabile) ciclo di timeout in questo modo:
waitLoop()
{
local timeout=$1
local test="$2"
if ! $test
then
local counter=0
while ! $test && [ $counter -lt $timeout ]
do
sleep 1
((counter++))
done
if ! $test
then
exit 1
fi
fi
}
Questo funziona per test="[ -e $somefilename ]"
. Tuttavia, testare l'esistenza non è sufficiente, a volte ho bisogno di verificare se una determinata stringa è stata scritta nel file. Ho provato test="grep -sq \"^sometext$\" $somefilename"
, ma questo non ha funzionato. Qualcuno può dirmi perché?
Esistono altre opzioni meno dettagliate per eseguire tale test?
Sarebbe possibile eseguire semplicemente coda sul file e controllare solo l'output di coda (ad esempio le ultime righe)? Questo presuppone che tail esegua un controllo più intelligente dello script per verificare quando un file cambia (e le possibilità sono, coda lo fa in un modo più corretto) – nos
Penso che il giusto approccio dipenda da cosa sia "qualche roba" e che cosa la "domanda" è. Puoi dare ulteriori dettagli sul vero problema che stai cercando di risolvere? La domanda come è scritta è un po 'vaga; potrebbero esserci approcci completamente diversi a cui non hai pensato. –
Vedere la mia risposta modificata. –