Назад | Перейти на главную страницу

Очистить каталог tmp для каждого пользователя

Я создал на своем новом сервере такую ​​структуру каталогов:

/ home / $ username / $ domain / (например: /home/domaincom/domain.com/) - public_html - logs - conf - tmp

Все работает хорошо, но, к сожалению, apache (или PHP) не очищает каталог tmp автоматически. : /

Есть ли простой способ очистить эти каталоги? Например, такое решение, как logrotate, где я устанавливаю каталог для поворота следующим образом: / home / * / * / logs

Проблема возникла из-за того, что во временном каталоге пользователя находится 1562074 файла. : / Я не уверен, кто (apache, php, внешний скрипт) должен чистить этот каталог и как часто.

Apache или php не обязаны очищать неиспользуемые временные файлы (в основном сессию _...)?

Спасибо за любые ответы. :)

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

Вы изменили путь сохранения сеанса PHP по умолчанию.

В системе Debian директива PHP session.gc_probability установлен в 0, предотвращая очистку старых сеансов, и настроено задание cron, которое очищает старые сеансы PHP - но только из пути сохранения по умолчанию!

Так что вы можете исправить это одним из двух способов:

  1. Измените путь сохранения сеанса PHP на значение по умолчанию.
  2. Устанавливать session.gc_probability = 1 в php.ini.

Универсальное решение практически невозможно. Зачем? Временная папка каждого пользователя имеет значение для каждого процесса. Кроме того, администратор не может полагаться на $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. Конечно, вы должны быть осторожны, чтобы правильно установить права собственности и разрешения.