
Сканирование и cron
Страница и виджет показывают не живой размер папок, а итоги последнего сканирования. Считать размер при каждом открытии рабочего стола на сайте с десятками тысяч файлов было бы слишком долго, поэтому modSizeControl один раз обходит сайт и запоминает, что сколько весит.
Запуск
- кнопка «Сканировать» или «Сканировать заново» на странице компонента;
- кнопка «Обновить» в виджете;
- cron.
Из менеджера сканирует пользователь с правом settings.
По шагам
Сканирование идёт шагами по несколько секунд. Поэтому большой сайт не упирается в max_execution_time, а прерванное сканирование продолжается с того же места.
- Страницу можно закрыть: сканирование продолжится, когда вы откроете страницу или рабочий стол снова.
- Два окна или окно и cron не обходят одни и те же папки: пока шаг занят, второй ждёт.
- Если незаконченное сканирование начато больше суток назад, оно отбрасывается и начинается заново: файлы за это время успели измениться.
- «Остановить» прерывает сканирование и выбрасывает собранное. Итоги предыдущего сканирования остаются.
Что обходится
Корень сайта и всё, что MODX держит вне его: ядро, assets, менеджер и коннекторы, если они вынесены, а также источники файлов из настройки modsizecontrol_file_system.
Категории определяются по путям из констант MODX, так что переименованные и вынесенные папки распознаются правильно. Источник файлов вне assets считается медиа.
Размер — настоящий размер файлов, без округления до блоков диска. По символическим ссылкам сканирование не ходит: так то, что лежит в другом месте, не посчитается дважды.
Что хранится
| Что | Сколько |
|---|---|
| Папки и типы файлов в них | только у последнего сканирования |
| Крупные файлы, от 100 КБ | 5000 самых крупных у последнего сканирования |
| Итоги: размер, число файлов и папок, категории, типы, компоненты | последние 500 сканирований, вкладка «История» |
Cron
Для сканирования по расписанию в компоненте есть скрипт:
php core/components/modsizecontrol/cli/scan.phpНапример, каждую ночь в три часа:
0 3 * * * php /var/www/site/core/components/modsizecontrol/cli/scan.php > /dev/null 2>&1Скрипт сам находит сайт: поднимается от своей папки до config.core.php, а если ядро вынесено за пределы сайта — берёт путь из config.inc.php ядра. Если ключ конфигурации не config, передайте его переменной окружения MODX_CONFIG_KEY.
Сканирование, начатое в менеджере, скрипт продолжит, а не начнёт второе. По ходу он печатает прогресс, а код выхода 0 означает, что сканирование закончено; при ошибке — 1 и причина в stderr.
Подсказка
Запускайте скрипт от того же пользователя, от которого работает PHP сайта. Иначе часть папок может оказаться недоступна для чтения, а файлы кеша, созданные скриптом, — для веб-сервера.
