Скрипт на Linux для уведомления по электронной почте о изменениях в файлах (не inotify и никакие другие утилиты)

Вопрос или проблема

Я ищу скрипт для Linux (не инструмент inotify или любые другие утилиты), который уведомляет меня по электронной почте, когда содержимое файла изменяется. Я нашел пример скрипта через Google, но мне нужно запускать его вручную, и он не отправляет никаких писем

[[ -z `find /path/to/file -mmin -60` ]]

if [ $? -eq 0 ]
then
  echo -e " /path/to/file ничто не изменилось"
else
  mail -s "/path/to/file было изменено" mailid
fi

Как только у вас есть скрипт, который делает то, что вы хотите, добавьте его в вашу таблицу cron (или crontab), и задача будет выполняться с нужной вам частотой. Итак:

#!/bin/bash
if ! [[ -z $(find /path/to/file -mmin 60) ]]; then
    # Файл был изменен, так что:
    echo -e "Хэш равен:\n$(md5sum /path/to/file)" | mail -s "/file было изменено на $(hostname -s) [email protected]"
else
    # Если это в crontab, уберите этот else блок; задания cron
    # не должны писать в стандартный вывод, чтобы этот вывод
    # не был отправлен локальному почтовому демону для доставки
    # в почтовый ящик владельца.
    echo "Изменения в /path/to/file не обнаружены."
fi

но мне нужно запускать его вручную

Что действительно важно, так это как быстро вам нужно уведомление по электронной почте. Если это не должно быть очень быстро, тогда задачи cron будут достаточны. Либо зафиксируйте время изменения файла в другом месте и сравните это значение, либо используйте ‘find’ с -mtime / -mmin. В качестве альтернативы создайте файл-флаг. Если целевой файл новее файла-флага, отправьте электронное письмо, затем обновите временную метку на файле-флаге.

Если вы хотите (почти) мгновенное уведомление, тогда посмотрите на incron

и он не отправляет никаких писем

…это маловероятно. Проверьте ваши журналы. Почему письма не доставляются, спрашивают здесь очень часто.

Ответ или решение

Для решения задачи по уведомлению об изменениях в содержимом файла в Linux с помощью скрипта, без использования таких утилит, как inotify, мы можем создать bash-скрипт, который будет отправлять уведомления на e-mail при каждом изменении файла. Давайте рассмотрим, как реализовать данный скрипт и добавить его в cron для автоматизированного выполнения.

Шаг 1: Создание скрипта

Для начала создадим bash-скрипт, который будет проверять время последнего изменения файла и отправлять уведомление по электронной почте, если файл был изменён.

Вот пример скрипта:

#!/bin/bash

# Путь к файлу для отслеживания
FILE="/path/to/file"

# Путь к временной метке для отслеживания изменений
TIMESTAMP_FILE="/path/to/timestamp_file"

# Проверка, существует ли файл метки, иначе создаем его
if [ ! -f "$TIMESTAMP_FILE" ]; then
    touch "$TIMESTAMP_FILE"
fi

# Получаем время последнего изменения файла
LAST_MODIFIED=$(stat -c %Y "$FILE")
# Получаем сохраненное время изменения
SAVED_MODIFIED=$(stat -c %Y "$TIMESTAMP_FILE")

# Сравниваем времена
if [ "$LAST_MODIFIED" -gt "$SAVED_MODIFIED" ]; then
    # Отправляем уведомление по email
    echo -e "Файл $FILE был изменен. Текущая хеш-сумма:\n$(md5sum "$FILE")" | mail -s "Уведомление: файл $FILE изменен" your_email@example.com

    # Обновляем файл метки с новым временем изменения
    cp "$FILE" "$TIMESTAMP_FILE"
fi

Объяснение работы скрипта:

  1. Переменные: Убедитесь, что вы заменили /path/to/file и /path/to/timestamp_file на актуальные пути к вашим файлам.
  2. Файл метки: Скрипт использует файл метки, чтобы отслеживать время последнего изменения отслеживаемого файла.
  3. Проверка изменений: Если текущая метка изменения файла новее, чем сохраненная, то:
    • Отправляется электронное письмо с хеш-суммой файла.
    • Обновляется файл метки, чтобы сохранить новое время изменения.

Шаг 2: Настройка cron

Чтобы скрипт выполнялся автоматически, добавим его в cron.

  1. Откройте терминал и введите:
    crontab -e
  2. Добавьте следующую строку, чтобы запускать скрипт, например, каждую минуту:
    * * * * * /bin/bash /path/to/your_script.sh

Шаг 3: Проверка отправки email

Если уведомления не отправляются, важно удостовериться, что система настроена на отправку email. Проверьте следующие моменты:

  • Убедитесь, что установлен и настроен почтовый агент, например, sendmail или postfix.
  • Проверьте логи почтовой системы (обычно /var/log/mail.log или /var/log/maillog) для диагностики проблем с отправкой.

Заключение

Теперь у вас есть скрипт, который автоматически уведомит вас по электронной почте каждый раз, когда изменяется указанный файл. С помощью cron задача будет выполняться в фоновом режиме, что обеспечивает постоянный мониторинг файла без необходимости вручную запускать скрипт. Проверьте настройки почтового сервера, чтобы уведомления доставлялись без проблем.

Оцените материал
Добавить комментарий

Капча загружается...