У мене є каталог з журналами аварійного завершення, і я хотів би використовувати умовний оператор у скрипті bash на основі команди find.
Файли журналу зберігаються в такому форматі:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
Я хочу, щоб оператор if повертав істину лише в тому випадку, якщо для конкретного додатка є журнал аварій, який було змінено протягом останніх 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
. Також дивіться приклади команд у розділі Чому циклічно переходить на вихідну погану практику?