я хочу лог-файл с хвостовым Grep и послал его по почте как:хвост и журнал Grep и почты (Linux)
tail -f /var/log/foo.log | grep error | mail -s subject [email protected]
, как я могу это сделать?
я хочу лог-файл с хвостовым Grep и послал его по почте как:хвост и журнал Grep и почты (Linux)
tail -f /var/log/foo.log | grep error | mail -s subject [email protected]
, как я могу это сделать?
У меня все получится. Возможно, я кое-что узнаю, если мой код нечеткого bash будет тщательно изучен. Есть шанс, что уже есть решения для этого, но я не собираюсь это выяснять, так как я уверен, что вы преодолели глубину и ширину кибероника. Похоже, что то, что вы хотите, можно разделить на два бита: 1) через равные промежутки времени получить «последний хвост» файла, 2) если последний хвост действительно существует, отправьте его по электронной почте. Для регулярных интервалов в 1) используйте cron. Для получения последнего хвоста в 2) вам нужно будет отслеживать размер файла. Сценарий bash ниже делает это - это решение для 2), которое может быть вызвано cron. Он использует размер кешированного файла, чтобы вычислить кусок файла, который ему нужно отправить по почте. Обратите внимание, что для файла myfile создается файл .offset.myfile. Кроме того, сценарий не позволяет компонентам пути в имени файла. Перепишите или исправьте его в вызове [например. (cd/foo/bar & & segtail.sh zut), предполагая, что это называется 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" [email protected]
fi
В этой части grep на ваш вопрос не было ответа. Оставленный как упражнение. – micans
Нужны полные кавычки вокруг расширений переменных имени файла. Путь к bash неверен для всех систем; возможно, вызывается через 'env'. Вывод 'stat' сильно варьируется между системами и версиями (!). Предполагая, что последний GNU stat, попробуйте -c решить эту проблему и избежать необходимости разбирать. – Sorpigal
Нет необходимости в 'cat':' offset = $ (<. Offset. $ File) '. Вторая часть 'if [[-e $ file && $ size> $ offset]]' является лексическим сравнением, поэтому она не будет делать то, что вы ожидаете, если, например, '$ size' == 10 и' $ offset '== 2. Используйте это вместо:' if [[-e $ file]] && (($ size> $ offset)) '. Вы можете опустить знаки доллара в большинстве случаев внутри '(())' и '$ (())'. –
Вы хотите отправить электронное письмо при возникновении ошибок при отправке по электронной почте? Это может произойти сбой;)
Однако вы можете попробовать что-то вроде этого:
tail -f $log |
grep --line-buffered error |
while read line
do
echo "$line" | mail -s subject "$email"
done
Что для каждой строки в выводе Grep посылает по электронной почте.
Run выше сценарий оболочки с
nohup ./monitor.sh &
поэтому он будет продолжать работать в фоновом режиме.
вам не нужны обратные косые обратные косые черты - оболочка будет смотреть на следующую строку для трейлинг-канала (а также '&', '&&' и '||') –
Интересно ... одно, что я пропустил. Спасибо @glenn jackman –
Предположим, что я хочу распечатать 10 строк после ошибки (ошибка grep -A 10). В вашем подходе я получаю 10 писем, что мне нужно сделать, чтобы получать только одну почту, включая 10 строк? – markus
Этот вопрос подобен «У меня есть» print ('Foo'); 'и я хочу, чтобы он печатал« Foo ». Как мне это сделать?» Что именно * * ваш вопрос? –
Вы, вероятно, не хотите 'tail' * -f *, поскольку это будет непрерывно следовать за дном файла. 'grep' тоже не ** tail ** logs. В чем проблема, которую вы пытаетесь решить? – Johnsyweb
'tail -f .. | grep ... '- выводить добавленные данные по мере роста файла и с использованием grep, он печатает только строки добавления, которые соответствуют только – ajreal