Мониторинг изменений в файлах WordPress — важная задача для обеспечения безопасности и контроля целостности сайта. Особенно если у вас есть автоматические резервные копии, то своевременное обнаружение неожиданных изменений поможет быстро реагировать на взломы или ошибки. В этой статье мы подробно разберём, как использовать Linux-инструмент inotify для эффективного слежения за файлами WordPress.
Что такое inotify и почему он полезен для WordPress
inotify — это интерфейс ядра Linux, позволяющий приложениям получать уведомления о событиях в файловой системе (создание, изменение, удаление файлов и папок). Это гораздо эффективнее, чем классический polling (опрос файлов), так как события приходят мгновенно и с минимальной нагрузкой на сервер.
Для WordPress это удобно, например, чтобы:
- Отслеживать изменения в файлах тем, плагинов и ядра.
- Выявлять несанкционированные правки, вызванные взломом.
- Автоматически запускать резервное копирование при изменениях.
Мониторинг можно настроить на нужные директории — например, wp-content и wp-config.php.
Установка и базовая настройка inotify-tools
Для удобной работы с inotify в командной строке лучше установить пакет inotify-tools. Он предоставляет утилиты inotifywait и inotifywatch.
Установка на Ubuntu/Debian:
sudo apt update
sudo apt install inotify-tools
Проверим, что inotifywait доступен:
inotifywait --version
Теперь можно использовать скрипты с inotifywait для слежения за изменениями.
Пример скрипта для мониторинга изменений в WordPress
Создадим bash-скрипт wpbackup-inotify-monitor.sh, который будет отслеживать изменения в папке wp-content и запускать резервное копирование, например, вызывая плагин или свой PHP-скрипт.
#!/bin/bash
WATCH_DIR="/var/www/html/wp-content"
# Функция запуска резервного копирования
wpbackup_run_backup() {
echo "$(date) - Изменения обнаружены, запускаем бэкап..."
# Здесь можно вставить вызов wp-cli, API плагина или curl вызов
# Пример с wp-cli:
# wp backup create --path=/var/www/html
}
# Запускаем inotifywait в бесконечном цикле
inotifywait -m -r -e modify,create,delete,move "$WATCH_DIR" | \
while read path action file; do
echo "Изменение: $action в $path$file"
wpbackup_run_backup
# Можно добавить дебаунс, чтобы не запускать копии слишком часто
done
Этот скрипт будет слушать события изменения, создания, удаления и перемещения файлов в wp-content и при любом из них запускать функцию резервного копирования.
Как добавить дебаунс для предотвращения частых запусков
Если изменений много, бэкап может запускаться слишком часто. Добавим задержку с помощью временного файла:
#!/bin/bash
WATCH_DIR="/var/www/html/wp-content"
DEBOUNCE_FILE="/tmp/wpbackup_debounce"
DEBOUNCE_SECONDS=300
wpbackup_run_backup() {
echo "$(date) - Запуск резервного копирования"
# Ваша логика резервного копирования
}
while inotifywait -r -e modify,create,delete,move "$WATCH_DIR"; do
now=$(date +%s)
if [ -f "$DEBOUNCE_FILE" ]; then
last_run=$(cat "$DEBOUNCE_FILE")
else
last_run=0
fi
if (( now - last_run > DEBOUNCE_SECONDS )); then
wpbackup_run_backup
echo $now > "$DEBOUNCE_FILE"
else
echo "Пропускаем запуск, прошло менее $DEBOUNCE_SECONDS секунд с последнего бэкапа"
fi
done
Интеграция с плагинами для резервного копирования
Если вы используете популярные плагины резервного копирования, можно запускать их через WP-CLI или API. Например, для плагина UpdraftPlus вызов резервного копирования из командной строки:
wp updraftplus backup --path=/var/www/html
В нашем скрипте замените функцию wpbackup_run_backup на вызов команды выше.
Для плагина WPBackItUp или другого, поддерживающего WP-CLI, принцип тот же.
Логирование и уведомления
Для удобства ведите лог работы скрипта, чтобы видеть, когда и какие изменения происходят. Добавьте в функцию wpbackup_run_backup запись в файл лога:
echo "$(date) - Бэкап запущен" >> /var/log/wpbackup-inotify.log
Также можно реализовать отправку уведомлений по email или в Telegram с помощью curl и webhook.
Подводные камни и рекомендации
- Убедитесь, что у пользователя, запускающего скрипт, есть права на чтение файлов WordPress и выполнение WP-CLI.
- inotify имеет ограничение на количество отслеживаемых файлов, оно настраивается в ядре Linux параметром
fs.inotify.max_user_watches. Для больших сайтов его нужно увеличить. - Следите за нагрузкой — при большом количестве событий возможна высокая нагрузка на диск и CPU.
- Для мониторинга других важных файлов, например
wp-config.php, добавьте их пути в скрипт. - Используйте systemd или supervisor для автоматического запуска и перезапуска скрипта.
Выводы и практическое применение
Использование inotify в связке с автоматическим резервным копированием — мощное решение для быстрой реакции на изменения в WordPress. Это особенно актуально для сайтов с высокой активностью и строгими требованиями к безопасности.
Такой подход дополнит ваши регулярные бэкапы и позволит минимизировать риск потери данных или длительного простоя сайта.
Если вы хотите узнать больше о настройках и плагинах резервного копирования, рекомендуем ознакомиться с решениями на WPSHOP.RU.