Как найти grep-ed значение в файлах журнала в каталоге каждые 60 минут в сценарии оболочки? - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть каталог с именем / qfs / input / ad_logs. Каждые 15 минут или около того новый файл выгружается в этот каталог. Мне нужно проверять этот каталог каждый час, чтобы увидеть, есть ли определенное значение в 10-м поле логов. Использовали команду lzop -cd file_name_20200209.lzo | cut -f10 -d, | grep mcid=, чтобы найти значение в журналах.

Как мне сделать этот скрипт оболочки, чтобы автоматизировать процесс и предупредить меня о найденном значении в журналах?

1 Ответ

2 голосов
/ 13 февраля 2020

Создайте сценарий:

#!/bin/sh
if lzop -cd file_name_20200209.lzo | cut -f10 -d, | grep -q mcid=; then
      # alert me of the found value in the logs?
      logger -p local3.info -t "VERY_IMPORTANT_SCRIPT" "alert! The value was found in the logs"
fi

Затем добавьте этот сценарий в cron , если он у вас есть, или создайте службу системного таймера , если ваша система использует systemd, что будет запускать ваш скрипт каждый час. Например, создайте два файла:

# /etc/systemd/service/very_important_script.timer
[Unit]
Description=Run very_important_script hourly

[Timer]
OnCalendar=hourly
Persistent=true

[Install]
WantedBy=timers.target

и

# /etc/systemd/service/very_important_script.service
[Unit]
Description=very_important_script 

[Service]
ExecStart=/path/to/the/very_important_script

[Install]
WantedBy=multi-user.target

и выполните systemctl deamon-refresh ; systemctl enable very_important_script.timer ; systemctl start very_important_script.timer для запуска таймера.

Например, вы можете принять во внимание только файлы изменилось за последний час:

#!/bin/sh
if 
      find . -maxdepth 1 -type f -name 'file_name_*.lzo' -mmin -60 |
      xargs lzip -cd | 
      cut -f10 -d, | grep -q mcid=  
      # maybe add -m1 to grep?
then
      # alert me of the found value in the logs?
      logger -p local3.info -t "VERY_IMPORTANT_SCRIPT" "alert! The value was found in the logs"
fi
...