Grep последний файл для строки и предупреждения / электронной почты, если он найден

#!/bin/sh

service axtty stop

while netstat -d | grep -q axel ; do
  sleep 1
done

service axtty start

ПРИМЕЧАНИЕ. Используя GNU sleep , вы можете сделать sleep 0,1 или другую долю секунды с плавающей запятой.

0
21.11.2018, 23:51
3 ответа

¿Solo desea grep el archivo.cdt/cdr más reciente?

dir=/path/to/files
lastCIR="$(find ${dir} -type f -name '*.CIR' | tail -1)"
lastCDR="$(find ${dir} -type f -name '*.CDR' | tail -1)"

if grep FCE-Error "${lastCIR}" || grep FCE-Error "${lastCDR}";then
  echo 'alert' | mail -s subject mail@example.com
fi
0
28.01.2020, 02:43

Desde lo alto de mi cabeza esto debería hacer:

[ $(find /path/to/dir -cmin -5 -type f -exec grep -F 'FCE-Error' {} \; | wc -l) -gt 0 ] && mail [...] # I let you complete mail command

Esta línea busca (encuentra )archivos (-tipo f )creados en los últimos 5 minutos (-cmin -5 )y para cada ejecución grep, la salida es entonces pasado a wc para contar líneas, el resultado general se compara con 0 (-gt )y, si es cierto, activa el comando de correo para enviar el correo.

Puede configurar este comando para que se ejecute cada 5 minutos en cron y debería evitar alertas repetidas (en algunos casos extremos cuando la alerta acaba de llegar y cron no llega exactamente a tiempo)

0
28.01.2020, 02:43

Suponiendo que los archivos están en el directorio actual y que está utilizandobash:

files=( T*.CDT )
grep 'FCE-Error' "${files[-1]}"

Esto haría un grep del archivo .CDTmás reciente para la cadena. Podrías hacer lo mismo con el otro tipo de archivo.

El patrón global de shell T*.CDTse expande a todos los nombres de archivo coincidentes ordenados lexicográficamente, y dado que está utilizando nombres de archivo sanos (con marcas de tiempo adecuadas que se ordenan correctamente ), el último de estos será el archivo más reciente.

Para enviar una alerta por correo si se encuentra la cadena:

files=( T*.CDT )
if grep -q 'FCE-Error' "${files[-1]}"; then
    mail -s 'Alert' someperson@example.com <<END_MESSAGE
We've found "FCE-Error" in ${files[-1]}, do something!
END_MESSAGE
fi

Usando algún otro shell POSIX:

set -- T*.CDT            # set positional parameter to all matching filenames
shift "$(( $# - 1 ))"    # shift off all but the last filename
if grep -q 'FCE-Error' "$1"; then
    mail -s 'Alert' someperson@example.com <<END_MESSAGE
We've found "FCE-Error" in $1, do something!
END_MESSAGE
fi
1
28.01.2020, 02:43

Теги

Похожие вопросы