Полезный скрипт для администрирования вашего хостинга — очистка Mod-tmp

В своей практике хостинга на Apache сервере, наткнулся на достаточно большую проблему связанную с переизбытком занимаемого дискового пространства папкой «mod-tmp», находящейся в корне вашего хостинга. В данной папке Apache хранит сессии (session) пользователей вашего сайта.

При неправильной настройке сервера админами, эта папка может разрастись до огромных размеров и занять такое дорогое вам дисковое пространство. Причина проблемы и решение изложены в подробном описании…

Причина переполнения mod-tmp

Эта проблема может возникнуть на виртуальном хостинге, администраторы которого не настроили правильным образом Apche утилиту «garbage collector». Данная стандартная утилита должна периодически собирать и удалять мусор из этой папки. Мусор в данном случае — это просроченные сессии, которые хранить нет никакого смысла.

Первопричина в том, что в настройках PHP.ini администраторы хостинга указывают папку, куда должены складываться сессии (save_path), но забывают активировать автоматическую очистку старых сессий. Т.е. параметр gc_probability остается = 0. А при грамотной настройке Вэб-сервера должен быть = 1.

session.save_path = ‘/var/www/userXXX/data/mod-tmp’ # или возможно bin-tmp
session.gc_probability = 0

Актуальные настройки вашего сервера можно посмотреть, например командой PHP:
<?php phpinfo(); ?>, либо на специальной странице вашего хостинга.

Решение проблемы — прописать скрипт очистки

В панели администрирования вашего хостинга необходимо добавить задачу (job) в планировщик Cron:

[ -x /usr/lib/php5/maxlifetime ] && [ -d /var/www/userXXX/data/mod-tmp ] && find /var/www/userXXX/data/mod-tmp/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm ;

Данный скрипт будет периодически удалять из папки файлы устаревших сессий. Не забудьте прописать правильный путь корневой директории на вашем сервере. Эту задачу можно запланировать, например, на ежедневное выполнение. Если вы не знаете как добавлять задачи в планировщик задач Cron, то можно обратиться к Википедии (торопитесь, а то Википедию скоро могут закрыть).

Один комментарий

  • Иван

    У кого нет скрипта Скрипта /usr/lib/php5/maxlifetime, то вот его содержимое:

    #!/bin/sh -e

    max=1440

    for ini in /etc/php5/*/php.ini; do
    cur=$(sed -n -e ‘s/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p’ $ini 2>/dev/null || true);
    [ -z «$cur» ] && cur=0
    [ «$cur» -gt «$max» ] && max=$cur
    done

    echo $(($max/60))

    exit 0

  • Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *