Как эффективно отслеживать изменения каталога в linux?

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

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

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

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

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

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

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

Так:

единственная проблема заключается в том, что имена файлов, которые используются для создания has, являются только теми, на которые обычно ссылаются непосредственно в блоке HTML-Head, и не включить импорт CSS в файлы.

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

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

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

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

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

что-то подобное?

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

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

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

4 ответов


Я предлагаю вам использовать 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, которые позволят вам получать уведомления о времени изменения в каталоге.


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

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