Ho una directory con i registri degli arresti anomali e vorrei usare un'istruzione condizionale in uno script bash basato su un comando find.
I file di registro sono memorizzati in questo formato:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
Voglio che l'istruzione if ritorni vera solo se esiste un registro degli arresti anomali per un'app specifica che è stata modificata negli ultimi 5 minuti. Il find
comando che vorrei usare è:
find /var/log/crashes -name app-\*\.log -mmin -5
Non sono sicuro di come incorporarlo if
correttamente in una dichiarazione. Penso che potrebbe funzionare:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
Ci sono alcune aree in cui non sono chiaro:
- Ho esaminato le bandiere if ma non sono sicuro di quale, se ce ne fosse, che avrei dovuto usare.
- Ho bisogno della
test
direttiva o dovrei semplicemente elaborare direttamente i risultati del comando find o utilizzare invecefind... | wc -l
per ottenere un conteggio di riga? - Non è necessario al 100% per rispondere a questa domanda, ma
test
è per testare i codici di ritorno che i comandi restituiscono? E sono in qualche modo invisibili - al di fuori distdout
/stderr
? Ho letto laman
pagina ma non sono ancora chiaro su quando utilizzarlotest
e su come eseguirne il debug.
... -exec command ';' -quit
, ma non credo che ci sia alcuna soluzione per il secondo oltre all'analisi del risultato. Inoltre, in entrambi i casi, il problema principale con l'analisi del risultato di find
(ovvero l'impossibilità di distinguere i delimitatori dai caratteri nei nomi dei file) non si applica, poiché in questi casi non è necessario trovare delimitatori.
find ... -exec
. Vedi anche i comandi di esempio in Perché il looping sull'output di find è una cattiva pratica?