Как эффективно контролировать каталог для изменений в Linux?

Я работаю с Magento, и есть функция, которая объединяет CSS и Javascript в один большой файл.

Независимо от плюсов и минусов этого, существует следующая проблема:

Окончательный файл кэшируется на нескольких уровнях, которые включают, но не ограничиваются:

  • Amazon CloudFront
  • Прокси-серверы
  • Кэш браузера клиентов

Magento использует сумму MD5 связанных имен файлов css для генерации нового имени файла для объединенного файла css. Так что каждая страница, имеющая отдельный набор файлов css, получает надлежащий объединенный файл css.

Чтобы обойти проблему кэширования, я также включил временные метки изменения файла в этот хэш, так что генерируется новый хеш, каждый раз, когда изменяется файл css.

Таким образом, полные преимущества не ревальвативной оценки кэширования, но если что-то изменилось, то оно сразу видно, потому что ссылка ресурса изменилась.

Все идет нормально:

Единственная проблема заключается в том, что имена файлов, которые используются для генерации, есть только те, которые обычно будут напрямую ссылаться в блоке HTML-Head и не включают импорт css внутри этих файлов .

Таким образом, изменения в файлах, импортируемых внутри файлов css, не приводят к новому хешу.

Нет, я действительно не хочу рекурсивно разбирать все импорт и сканировать их или что-то в этом роде.

Я скорее подумал о решении на базе каталогов. Есть ли что-нибудь, что могло бы эффективно отслеживать «последнее изменение внутри каталога» на основе файловой системы?

Мы используем ext4.

Или, может быть, есть другой способ, возможно, с помощью команды find, которая выполняет всю работу, основанную на индексах inode?

Что-то вроде того?

Я видел много программ, которые мгновенно «видят» изменения без сканирования целых файловых систем. Я считаю, что есть и такие «демоны обработки файлов», доступные под Linux.

Проблема в том, что каталог css довольно огромен.

Может кто-то указать мне верное направление?

Solutions Collecting From Web of "Как эффективно контролировать каталог для изменений в Linux?"

Я предлагаю вам использовать php-независимый демон для изменения даты изменения вашего основного файла css при изменении одного из файлов зависимых php. Вы можете использовать dnotify для него, например:

dnotify -a -r -b -s /path/to/imported/css/files/ -e touch /path/to/main/css/file; 

Он будет выполнять «касание» в главном файле css каждый раз, когда изменяется один из файлов в другой папке (-a -r -b -s = любой поиск / рекурсивный поиск / запуск каталога в фоновом режиме / без вывода). Или вы можете сделать любое другое действие и протестировать его с PHP.

Если вы используете команду

 ls -ltr `find . -type f ` 

Это даст вам длинный список всех файлов с новейшими внизу.

Попытайтесь взглянуть на inotify пакеты, которые позволят вам получать уведомление в любое время, когда в каталоге происходит изменение.

  • InotifyTools
  • PHP-Inotify

Я никогда не использовал его, но, видимо, существует поддержка inotify для PHP .

(inotify будет наиболее эффективным способом получения уведомлений в Linux)