У меня есть каталог с журналами сбоев, и я хотел бы использовать условный оператор в скрипте bash на основе команды find.
Файлы журнала хранятся в следующем формате:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
Я хочу, чтобы оператор if возвращал значение true только в том случае, если для определенного приложения есть журнал сбоев, который был изменен за последние 5 минут. Команда, find
которую я бы использовал:
find /var/log/crashes -name app-\*\.log -mmin -5
Я не уверен, как правильно включить это в if
утверждение. Я думаю, что это может сработать:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
Есть несколько областей, где мне неясно:
- Я посмотрел на флаги if, но я не уверен, какой из них, если таковые имеются, мне следует использовать.
- Нужна ли мне
test
директива, или я должен просто обработать результаты команды find напрямую, или, может быть, использоватьfind... | wc -l
вместо этого счетчик строк? - Не на 100% необходимо ответить на этот вопрос, но
test
для проверки на коды возврата возвращаются команды? И они вроде невидимы - внеstdout
/stderr
? Я прочиталman
страницу, но мне все еще неясно, когда использоватьtest
и как ее отладить.
... -exec command ';' -quit
, но я не верю, что есть какое-то решение для второго, кроме анализа результата. Кроме того, в любом случае основная проблема с синтаксическим анализом результата find
(т. Е. Невозможность отличить разделители от символов в именах файлов) не применима, так как в этих случаях вам не нужно находить разделители.
find ... -exec
. Также см. Пример команд в разделе « Почему циклическая обработка вывода find является плохой практикой»?