Adicione "--line-buffered" ao comando grep. Mas como indicado na resposta por @Nick, você receberá um email para cada linha. Pode querer apenas remover o argumento "-B4" do comando grep.
tail -F --max-unchanged-stats=5 somelogfile.log | grep -B4 --line-buffered "FATAL" | while
read ERROR
do
echo "$ERROR" | mail -s 'FATAL ERROR' [email protected]
done
Tente isso. Eu testei no meu CentOS 6.9 VM e acredito que faz o que você está procurando realizar. Quando o script é iniciado pela primeira vez, você pode receber alguns e-mails se houver mensagens "FATAL" perto da parte inferior do arquivo de log.
#!/bin/bash
tail -f --max-unchanged-stats=5 somelogfile.log | grep --line-buffered "FATAL" | while read ERROR
do
grep -B4 "$ERROR" somelogfile.log \
| mail -s 'FATAL ERROR' [email protected]
done