email shell grep tail

email - registro y correo de cola y grep(linux)



shell tail (2)

Voy a probar esto. Tal vez aprenda algo si mi código malicioso de bash es escudriñado. Existe la posibilidad de que ya haya un millón de soluciones para hacer esto, pero no voy a averiguarlo, ya que estoy seguro de que ha explorado las profundidades y el ancho del cyberocean. Parece que lo que desea puede separarse en dos bits: 1) a intervalos regulares obtenga la ''última cola'' del archivo, 2) si la última cola realmente existe, envíela por correo electrónico. Para los intervalos regulares en 1), use cron. Para obtener la última cola en 2), tendrá que hacer un seguimiento del tamaño del archivo. El script bash a continuación lo hace: es una solución a 2) que puede invocarse cron. Utiliza el tamaño del archivo en caché para calcular el fragmento del archivo que necesita enviar. Tenga en cuenta que para un archivo myfile se crea otro archivo .offset.myfile. Además, la secuencia de comandos no permite componentes de ruta en el nombre del archivo. Reescriba o corrija en la invocación [por ejemplo, (cd / foo / bar && segtail.sh zut), suponiendo que se llame segtail.sh].

#!/usr/local/bin/bash file=$1 size=0 offset=0 if [[ $file =~ / ]]; then echo "$0 does not accept path components in the file name" 2>&1 exit 1 fi if [[ -e .offset.$file ]]; then offset=$(<".offset.$file") fi if [[ -e $file ]]; then size=$(stat -c "%s" "$file") # this assumes GNU stat, possibly present as gstat. CHECK! # (gstat can also be Ganglias Status tool - careful). fi if (( $size < $offset )); then # file might have been reduced in size echo "reset offset to zero" 2>&1 offset=0 fi echo $size > ".offset.$file" if [[ -e $file && $size -gt $offset ]]; then tail -c +$(($offset+1)) "$file" | head -c $(($size - $offset)) | mail -s "tail $file" foo@bar fi

Quiero cola archivo de registro con grep y lo envió por correo como:

tail -f /var/log/foo.log | grep error | mail -s subject [email protected]

¿Cómo puedo hacer esto?


¿Desea enviar un correo electrónico cuando se producen errores de correo electrónico? Eso podría fallar;)

Sin embargo, puedes intentar algo como esto:

tail -f $log | grep --line-buffered error | while read line do echo "$line" | mail -s subject "$email" done

Que para cada línea en la salida grep envía un correo electrónico.

Ejecutar sobre script de shell con

nohup ./monitor.sh &

por lo que seguirá ejecutándose en segundo plano.