Очистить каталог tmp для каждого пользователя
Я создал на своем новом сервере такую структуру каталогов:
/ home / $ username / $ domain / (например: /home/domaincom/domain.com/) - public_html - logs - conf - tmp
Все работает хорошо, но, к сожалению, apache (или PHP) не удаляет каталог tmp автоматически.:/
Есть ли простой способ очистить эти каталоги? Например, решение, такое как logrotate, где я устанавливаю каталог для вращения следующим образом: / home / * / * / logs
Проблема возникла из-за того, что в пользовательском временном каталоге находится 1562074 файла.:/ Я не уверен, кто (apache, php, внешний скрипт) должен чистить этот каталог и как часто.
Apache или php не обязаны очищать неиспользуемые временные файлы (в основном sess_...)?
Спасибо за любые ответы.:)
3 ответа
Вы изменили путь сохранения сеанса PHP по умолчанию.
В системе Debian директива PHP session.gc_probability
устанавливается в 0, предотвращая очистку старых сессий, и устанавливается задание cron, которое очищает старые сессии PHP - но только из пути сохранения по умолчанию!
Таким образом, вы можете исправить это одним из двух способов:
- Измените путь сохранения сеанса PHP обратно на его значение по умолчанию.
- Задавать
session.gc_probability = 1
вphp.ini
,
Предполагая linux, напишите скрипт для разбора домашнего каталога, для каждого каталога зайдите в каталог tmp и удалите все за определенную дату.
Примером может быть
#!/bin/bash
for list '/bin/ls -lRt /home/ | grep tmp/' do
/usr/bin/find $list -atime -10 -type -f -exec rm -f {} # find+ delete files older than ten days
done
Очевидно, вы захотите провести там некоторые проверки работоспособности, и мой синтаксис может быть неправильным, и так далее. Вы можете исключить некоторые каталоги, передать их команде ls в начале.
Когда вы довольны тем, что скрипт находит и удаляет то, что вы хотите, настройте его как задание cron для запуска ночью.
Общее решение почти невозможно. Зачем? Временная папка каждого пользователя является значением для процесса. Кроме того, админ не может положиться на $HOME/tmp
быть временной папкой пользователя, поскольку пользователь может ее изменить, и мы (пользователи) делаем это довольно часто, устанавливая $TMP в другое значение. Кроме того, каждый процесс может иметь различные настройки, которые пользователь вообще не может контролировать...
Предполагая, что вы заботитесь только о начальных значениях пользователей переменной среды $TMP, вы можете написать сценарий, который будет просматривать список пользователей, получать оболочку по умолчанию (это еще одно осложнение), находить настройки по умолчанию для $TMP и наконец, опустошите эти папки. Второй вариант - написать программу, которая входит в систему как определенный пользователь, читает пользовательский $TMP и очищает папку...
Тем не менее, я предполагаю, что все, что вам нужно, это очистить временные файлы в этих папках, которые некоторые веб-приложения используют для хранения загруженных файлов. Самое простое, что вы можете сделать, это сохранить свой собственный список этих каталогов в простом текстовом файле и написать небольшой скрипт, который будет проходить по этому списку, и удалять файлы, которые старше N дней...
Я предпочел бы переосмыслить общую структуру каталогов и настроить lighttpd или любой другой веб-сервер, который вы используете, php и все остальное, чтобы хранить временные файлы в ИЗВЕСТНОМ месте, чтобы вы могли легко выполнять очистку. Я бы настроил все из них для хранения временных файлов, скажем, /tmp/<domain>/<service>
поэтому для example.com вы должны иметь: /tmp/example.com/phpbb, /tmp/example.com/redmine, /tmp/example.com/php-sessions . Конечно, вы должны быть осторожны, чтобы правильно установить права доступа и права доступа.