Как выполнить команду при нахождении записи в логе

Я использую вот такую конструкцию

tail -f -n 1 ./server.log| grep -m 1 'search pattern' ; kill %1

Но проблема в том что server.log ротируется раз в час, следовально создается новый дискриптор, а тайл читает старый, в общем нужно каждый час перезапускать. Как избежать зависания tail ? Или что можно использовать вместо него? Или может есть какие то другие способы


Ответы (1 шт):

Автор решения: Roman Konoval

Используйте опцию -F:

tail -F --retry -n 1 ./server.log| grep -m 1 'search pattern' ; kill %1

Это заставит tail переоткрыт файл, если файл пересоздали/ротировали.

Из man-а:

The -F option implies the -f option, but tail will also check to see if the file being followed has been renamed or rotated. The file is closed and reopened when tail detects that the filename being read from has a new inode number.

→ Ссылка