Якщо ви шукаєте тільки для однієї з можливостей і хочуть залишитися в основному в оболонці , а не використовувати awkабо perl, ви могли б зробити що - щось на кшталт:
tail -F /path/to/serverLog |
grep --line-buffered 'server is up' |
while read ; do my_command ; done
... який буде працювати my_commandщоразу, коли у файлі журналу з'явиться " сервер вгору ". Для декількох можливостей ви, можливо, можете скинути grepі замість цього використовувати caseінтервал у while.
Столиця -Fповідомляє tailстежити за тим, щоб файл журналу повертати; тобто, якщо поточний файл буде перейменований, а інший файл з такою ж назвою займе своє місце, tailперейде на новий файл.
--line-bufferedОпція вказує grepпромивати його буфер після кожного рядка; в іншому випадку, my_commandможливо, їх не вдасться досягти вчасно (якщо припустимо, що в журналах розміщено рядки досить розумного розміру).
tail -Fдля обертання обертання журналу - тобтоmy.logстає повним і рухається до,my.log.1і ваш процес створює новеmy.log