Как эффективно отслеживать изменения каталога в 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)