Eu tenho um diretório com logs de falha e gostaria de usar uma instrução condicional em um script bash com base em um comando find.
Os arquivos de log são armazenados neste formato:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
Desejo que a instrução if retorne true somente se houver um log de falha para um aplicativo específico que foi modificado nos últimos 5 minutos. O find
comando que eu usaria é:
find /var/log/crashes -name app-\*\.log -mmin -5
Não sei como incorporar isso a uma if
declaração corretamente. Eu acho que isso pode funcionar:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
Existem algumas áreas em que não estou claro:
- Eu olhei para os sinalizadores if, mas não tenho certeza de qual deles, se houver, que devo usar.
- Preciso da
test
diretiva ou devo apenas processar diretamente os resultados do comando find ou usarfind... | wc -l
para obter uma contagem de linhas? - Não é 100% necessário para responder a essa pergunta, mas
test
é para testar contra códigos de retorno que comandos retornam? E eles são meio invisíveis - fora destdout
/stderr
? Eu li aman
página, mas ainda não sou muito claro sobre quando usartest
e como depurá-la.
... -exec command ';' -quit
, mas não creio que exista outra solução para além do que seja analisar o resultado. Além disso, em ambos os casos, o principal problema com a análise do resultado de find
(ou seja, incapacidade de distinguir delimitadores de caracteres nos nomes de arquivos) não se aplica, pois você não precisa encontrar delimitadores nesses casos.
find ... -exec
. Veja também os comandos de exemplo em Por que é um loop sobre a prática recomendada de saída do find?