LINUX.ORG.RU

Выполнить скрипт при совпадении слова

 


0

2

Привет. Помогите допилить мини скрипт. У меня есть файл в который постоянно пишется лог. Нужно в нем в реальном времени найти фразу и как только она появится выполнить скрипт. Но он не должен реагировать на фразы которые в нем уже есть, только на новые.

Я думаю реализовать это так:

  • tail -f /home/pi/log.txt | grep --line-buffered «DOWN» | /home/script.sh

Но у меня скрипт выполняется сразу.... КАк его заставить работать правильно?

Может, как-то так:

tail -n 0 -f /path/to/log.txt | grep --line-buffered --max-count 1 --fixed-strings "СЛОВО" >/dev/null && /path/to/script.sh

?

P.S. Не тестил.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)

У меня для обработки скриншотов одной игрули крутится вот такой скрипт, можешь переделать под себя

inotifywait -m -e close_write . --format '%f' |
        while IFS= read -r fname; do
                case "$fname" in
                        screen_*_hi.png)
                                echo "$fname"
                                convert -scale 25% "$fname" "${fname%_hi.png}.jpg" &&
                                        rm "$fname"
                                ;;
                        screen_*.png)
                                echo "$fname"
                                convert "$fname" "${fname%.png}.jpg" &&
                                        rm "$fname"
                                ;;
                        *)
                esac
        done

legolegs ★★★★★
()
Ответ на: комментарий от Deleted

Пробую но после того как он находит слово консоль задача завершается. Нужно что бы постоянно мониторил. Нужно как то цыкл сделать.

testsia
() автор топика
Ответ на: комментарий от testsia
tail -n 0 -f /path/to/log.txt | while grep --max-count 1 --fixed-strings "СЛОВО" >/dev/null; do /path/to/script.sh; done

P.S. Опять не тестил.

P.P.S. --line-buffered вроде вообще тут не имеет смысла.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Но у меня скрипт выполняется сразу.... КАк его заставить работать правильно?

А все слова «DOWN», имеющихся в логе до того, как ваш tail будет запущен не нужны?

vodz ★★★★★
()

Заменить tail на logtail, сунуть в cron и дергать раз в минуту

slowpony ★★★★★
()

Можно через python сделать, вот готовый плагин: https://github.com/alberts/check_mk/blob/master/checks/logwatch

Вот пример конфиг-файла:

# logwatch.cfg
# This file configures mk_logwatch. Define your logfiles
# and patterns to be looked for here.

# Name one or more logfiles
/var/log/messages
# Patterns are indented with one space are prefixed with:
# C: Critical messages
# W: Warning messages
# I: ignore these lines (OK)
# R: Rewrite the output previous match. You can use \1, \2 etc. for refer to groups (.*) of this match
# The first match decided. Lines that do not match any pattern
# are ignored
 C Fail event detected on md device
 I mdadm.*: Rebuild.*event detected
 W mdadm\[
 W ata.*hard resetting link
 W ata.*soft reset failed (.*FIS failed)
 W device-mapper: thin:.*reached low water mark
 C device-mapper: thin:.*no free space
 C Error: (.*)

/var/log/auth.log
 W sshd.*Corrupted MAC on input

/var/log/syslog /var/log/kern.log
 I registered panic notifier
 C panic
 C Oops
 W generic protection rip
 W .*Unrecovered read error - auto reallocate failed

# Globbing patterns are allowed:
# /sapdata/*/saptrans.log
#  C ORA-

Конечно, сложно, но вдруг кому пригодится.

iljuase ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.