В Nextcloud уже есть все необходимые компоненты для автоматической очистки удаленных файлов, поэтому большинству администраторов не требуется собственный скрипт оболочки. Согласно текущей документации по администрированию Nextcloud 35, рекомендуемый подход по-прежнему заключается в сочетании определенной политики хранения в корзине с надежным фоновым выполнением задач. Важная деталь заключается в том, что autoполитика по умолчанию не то же самое, что «удалять все ровно через 30 дней». Она хранит удаленные элементы не менее 30 дней, а затем делает их доступными для очистки, когда требуется освободить место.
Если ваша цель — предсказуемая очистка, установите явное максимальное время хранения и убедитесь, что фоновые задания Nextcloud выполняются через системный cron. Приведенные ниже шаги используют только поведение, описанное Nextcloud, и также объясняют, когда команды occ trashbin:expireи trashbin:cleanupуместны.
Что на самом деле делает автоматическая уборка мусорного ведра?
Когда приложение «Удаленные файлы» ( files_trashbin) включено, удаленные пользователями файлы перемещаются в корзину, а не удаляются немедленно. Это дает пользователям возможность восстановить удаленные файлы, но они все равно занимают место в памяти. Nextcloud управляет временем их хранения с помощью настройки trashbin_retention_obligationв config/config.php.
В текущей документации по настройке корзины Nextcloud определены следующие формы политик:
| Параметр | Значение | Хорошо подходит |
auto | Храните вещи не менее 30 дней; после этого, когда потребуется освободить место, извлеките подходящие вещи. | Небольшие установки, которые довольны поведением по умолчанию. |
D, auto | Храните вещи не менее D дней, затем проведите уборку, исходя из имеющегося пространства. | Необходимо установить минимальный период для восстановления, но нет жесткого крайнего срока для удаления. |
auto, D | Гарантируем удаление данных через D дней, при этом сохраняя возможность более ранней очистки, инициированной свободным пространством. | Вам нужен максимальный срок хранения, но вы можете допустить более раннее удаление при возникновении проблем с хранением. |
D1, D2 | Храните элементы не менее D1 дней и удаляйте их, когда их количество превысит D2 дня. | Необходимо установить как минимальный период восстановления, так и чётко определённый максимальный срок хранения. |
disabled | Отключить автоматическое удаление элементов из корзины. | Только в том случае, если неограниченное хранение данных является преднамеренным, а рост объема хранилища регулируется иным способом. |
Есть еще одно правило хранения, которое следует помнить: если квота пользователя превышена из-за удаленных файлов, Nextcloud может проигнорировать настройку срока хранения и очистить ненужные файлы до тех пор, пока не будут выполнены требования квоты. Именно поэтому срок хранения не следует рассматривать как гарантию неизменяемого резервного копирования.
Шаг 1: Прежде чем что-либо менять, выберите политику хранения данных.
Определите, для чего в вашей среде предназначена корзина. Если пользователи часто восстанавливают случайно удаленные файлы, установите для них осмысленный минимальный временной интервал. Если для вас приоритетны ограниченные ресурсы хранилища или документированная политика хранения данных, определите также и максимальный объем.
Например, эта настройка позволяет в любое время выполнять очистку по объему памяти, но гарантирует удаление файлов старше 30 дней:
'trashbin_retention_obligation' => 'auto, 30',
Если вы хотите, чтобы удаленные файлы сохранялись как минимум 30 дней и удалялись по истечении 30 дней, используйте вместо этого ограниченную политику:
'trashbin_retention_obligation' => '30, 30',
Выберите значения, соответствующие вашим требованиям к восстановлению. Более короткий период позволяет быстрее освободить место на диске, но сокращает время, необходимое пользователям для восстановления файлов. Более длительный период обеспечивает больше времени на восстановление, но может увеличить нагрузку на диск.
Шаг 2: Установите параметр trashbin_retention_obligation в файле config.php.
Откройте конфигурационный файл Nextcloud, обычно расположенный в config/config.phpкаталоге установки. Добавьте или измените параметр внутри $CONFIGмассива. Типичный пример:
<?php
$CONFIG = array (
// Other Nextcloud settings...
'trashbin_retention_obligation' => 'auto, 30',
);
Не редактируйте несвязанные значения и будьте осторожны, чтобы не раскрывать содержимое config.phpв заявках или на скриншотах, поскольку оно может содержать конфиденциальную конфигурацию сервера.
Также вы можете проверить действующую конфигурацию с помощью инструментов командной строки Nextcloud, вместо того чтобы копировать содержимое файла в сообщение об устранении неполадок.
Шаг 3: Используйте системный cron для надежной работы фоновых задач.
Политика хранения данных помогает только в том случае, если фоновые задачи Nextcloud действительно выполняются. В документации Nextcloud по фоновым задачам рекомендуется использовать cron операционной системы для производственных экземпляров. AJAX является режимом по умолчанию, но он зависит от посещений страниц и является наименее надежным вариантом.
В типичной установке Linux с использованием www-dataучетной записи веб-сервера отредактируйте файл crontab этой учетной записи:
crontab -u www-data -e
Затем запускайте Nextcloud cron.phpкаждые пять минут:
*/5 * * * * php -f /var/www/nextcloud/cron.php
Замените /var/www/nextcloudна реальный путь к вашей установке. В некоторых системах требуется полный путь к CLI PHP, например /usr/bin/php.
Вы также можете явно выбрать режим cron с помощью:
sudo -E -u www-data php /var/www/nextcloud/occ background:cron
В документации Nextcloud указано, что фоновая задача по удалению содержимого корзины выполняется каждые 30 минут. Вызов cron.phpкаждые пять минут не означает, что корзина очищается каждые пять минут; это означает, что планировщик получает частые возможности для запуска задач, срок выполнения которых истекает.
Шаг 4: Убедитесь, что планировщик работает.
После настройки cron сначала проверьте запись, относящуюся к операционной системе:
crontab -u www-data -l
Затем проверьте настройки администрирования Nextcloud, чтобы узнать статус фоновых заданий. На странице должно отображаться, что задания выполнялись недавно. Если отображаемое время последнего запуска постоянно увеличивается, исправьте cron, прежде чем диагностировать политику хранения.
В Nextcloud 35 в документацию occтакже включены команды проверки фоновых заданий, такие как background-job:list, background-job:running, и background-job:history. Они могут помочь, когда необходимо убедиться, что задания обрабатываются, а не просто предполагать, что cron активен.
Шаг 5: Используйте trashbin:expire для ручного запуска на основе политик.
Если вы настроили собственный период хранения, вы можете применить эту политику вручную с помощью:
sudo -E -u www-data php /var/www/nextcloud/occ trashbin:expire
В справочнике команд Nextcloud для файлов и корзины отмечается важное ограничение: trashbin:expireручное удаление данных выполняется только при заданном пользовательском периоде хранения. При использовании autoполитики по умолчанию команда завершается с информационным сообщением и ничего не делает, поскольку автоматическое удаление данных обрабатывается фоновым заданием.
Если вы намеренно хотите создать отдельную запись cron для этой функции trashbin:expire, Nextcloud описывает способ предварительного отключения встроенной фоновой задачи приложения по удалению ненужных файлов:
sudo -E -u www-data php /var/www/nextcloud/occ config:app:set --value=no files_trashbin background_job_expire_trash
Затем вы можете составить собственное расписание . Это расширенная опция. Для большинства установок проще и удобнее occ trashbin:expire --quietоставить включенным встроенное задание на истечение срока действия и использовать обычный планировщик Nextcloud .cron.php
Не путайте trashbin:expire с trashbin:cleanup.
Названия похожи, но команды имеют совершенно разные эффекты. trashbin:expireУдаляет элементы, соответствующие настроенной политике хранения. trashbin:cleanupБезвозвратно удаляет содержимое корзины для указанных вами пользователей.
Например:
sudo -E -u www-data php /var/www/nextcloud/occ trashbin:cleanup --all-users
Это деструктивная очистка всех пользователей. Она полезна, когда вам нужно намеренно очистить корзину каждого пользователя, но обычно это неподходящая команда для рутинной автоматизации на основе хранения данных, поскольку она игнорирует созданное вами окно восстановления. Не добавляйте команду очистки всех пользователей в cron, если постоянная, безусловная очистка действительно не является вашей политикой.
Шаг 6: Проверьте и отрегулируйте размер корзины в Nextcloud 35
В текущей документации по командам Nextcloud 35 есть параметр trashbin:size, позволяющий администраторам проверять или устанавливать целевой размер корзины глобально или для каждого пользователя. Чтобы просмотреть текущее глобальное значение:
sudo -E -u www-data php /var/www/nextcloud/occ trashbin:size
Чтобы просмотреть эффективную цель конкретного пользователя:
sudo -E -u www-data php /var/www/nextcloud/occ trashbin:size --user USER_ID
Настраиваемый целевой размер может дополнять хранение данных по возрасту, когда основной проблемой является объем хранилища. Nextcloud отмечает, что изменение глобального размера по умолчанию немедленно запускает очистку существующих корзин, поэтому рассматривайте изменение размера как оперативное действие, а не просто как безобидную настройку отображения.
Как определить, работает ли автоматическая очистка
- В статусе фоновых заданий отображаются последние запуски.
- В файле crontab операционной системы содержится ожидаемая
cron.phpзапись.
- Ваши настройки
trashbin_retention_obligationсоответствуют задуманной вами политике.
- Старые мусорные предметы со временем исчезают в соответствии с установленным максимальным сроком хранения, если таковой имеется.
trashbin:expireПри настройке пользовательской политики система ведет себя так, как описано в документации.
- Рост использования диска или квоты неожиданно прекращается, поскольку устаревшие удаленные файлы больше не сохраняются неограниченно долго.
Если старые файлы остаются дольше, чем ожидалось, сначала убедитесь, что ваша политика действительно содержит максимальное значение. autoНастройка по умолчанию не гарантирует удаление ровно через 30 дней. Затем проверьте фоновые задания. Только после этих проверок следует изучать разрешения, серверные системы хранения или журналы приложений.
Практическая конфигурация для большинства серверов, размещенных на собственном сервере.
Для типичного экземпляра с самостоятельным размещением разумной отправной точкой является использование системного cron каждые пять минут и определение явного максимального срока хранения удаленных файлов. Например, 'auto, 30'это позволит пользователям хранить файлы примерно месяц в обычных условиях, гарантируя при этом, что файлы не будут оставаться в папке бесконечно. Если пользователям всегда необходимо иметь полный период восстановления независимо от нехватки места на диске, используйте политику ограничения минимального и максимального времени хранения, например, такую '30, 30':
Храните резервные копии отдельно от корзины. Корзина — это функция восстановления пользователя с квотами и правилами хранения; она не заменяет независимую стратегию резервного копирования.
Официальные ссылки Nextcloud