FastNetMon

Friday, 2 April 2010

Очистка файлов сессий PHP в Debian, через какое время это делать?

На долго работающих системах образуются папки /tmp или mod-tmp (либо bin-tmp) в случае использования ISPManager размером в миллионы и десятки миллионов файлов с файлами PHP сессий sess_тут_длинный_код, которые служат для временного хранения сессий от пользователей. То, что это наносит ущерб производительности файловой системы - однозначно (попробуйте пролистать такую папку ls ом или хотя бы удалить), поэтому их надо удалять. Возникает вопрос - как часто их можно удалять, чтобы не повредить работе приложений их использующих?

В комментариях к конфигу в Debian 5 Lenny сказано следующее:

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440

; NOTE: If you are using the subdirectory option for storing session files
; (see session.save_path above), then garbage collection does *not*
; happen automatically. You will need to do your own garbage
; collection through a shell script, cron entry, or some other method.
; For example, the following script would is the equivalent of
; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
; cd /path/to/sessions; find -cmin +24 | xargs rm


Как можно понять из текста, за время жизни файлов сессий отвечает переменная session.gc_maxlifetime, которая стандартно выставлена в 1440 секунд или 24 минуты. Также для определения этого промежутка на основе значений, заданных в системных php.ini, в Debian есть служебный скрипт:

/usr/lib/php5/maxlifetime
24


Все хорошо и прекрасно. Да, отчасти. А что будет, если кто-то из авторов CMS написал такую систему авторизации пользователей, которая работает на таких вот сессиях и, например, именно по ним проверяет залогиненость пользователя? Правильно, его вышибет. Думаете никто так не сделает? Ошибаетесь: http://php.net/manual/en/ref.session.php

Итого, резюмирую - лично я эту папку чистить буду не чаще раза в 2 недели (ну по крайней мере GMail и Yandex.Mail меня примерно через это время выкидывают и заставляют повторно авторизироваться), это самый безопасный путь. Других нету, увы.

2 comments :

  1. find /var/lib/php5 -name "sess_*" -type f -mtime -30 -delete
    В крон.

    ReplyDelete
  2. 0 1 * * * find /var/lib/php5 -name "sess_*" -type f -mtime -30 -delete
    Вот так более правильней )

    ReplyDelete

Note: only a member of this blog may post a comment.