Задать вопрос
opium
@opium
Просто люблю качественно работать

Очистка php сессий в ubuntu и debian

Debian я так понимаю пошел своим путем и для очистки сесий использует скрипт из крона который, чистит файлы со старыми php сессиями.
Выглядит этот скрипт вот так

32093? Ss 0:00 /bin/sh -c [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime)! -execdir fuser -s {} 2>/dev/null \; -delete
32098? S 1:54 find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +24! -execdir fuser -s {}; -delete

Большая проблема что он сильно грузит винт я решил перенесом каталога с сессиями в память через tmpfs

Но появилась вторая проблема, скрипт не успевает отрабатывать удаление файлов и запускается снова, в моменты когда сессий очень много запускается несколько десятков скриптов на очистку сессий и они съедают весь процессор.

Есть какие то стандартные пути решения этой проблемы?

версия ubuntu 12.04, php стандартный из репозитория.
  • Вопрос задан
  • 10063 просмотра
Подписаться 7 Оценить 2 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 7
Melkij
@Melkij
DBA для вашего PostgreSQL?
Сессий очень много — это сколько?
Может, имеет смысл их в memcache пихать? Или хотя бы партицирование по директориям включить (см. описание настройки www.php.net/manual/en/session.configuration.php#ini.session.save-path )?
Ответ написан
Комментировать
@alexeysilver
Мы храним сессии в redis, не нашел причин считать это плохим вариантом. Но в Вашем случае я бы просто уменьшил время запуска скрипта, и тогда скрипты бы не пересекались.
Ответ написан
kemko
@kemko
Самый простой вариант — перед началом проверки проверять, есть ли в /tmp некий файл, если есть — остановиться, если отсутствует — создать его, вычистить старые сессии и затем удалить его.
Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.

Да, есть. Называется flock.

Использовать примерно так в кроне: 0 0 * * * root flock -n /tmp/somefile.lock "somecsript.sh"

Второй запуск команды flock -n /tmp/somefile.lock "somecsript.sh" уже не случится до тех пор, пока первый инстанс работает.

В somescript.sh, соответственно, пихаете всё то, что запускается у вас сейчас (chmod +x на скрипт не забудьте).

Ответ написан
Комментировать
@impass
Если файлов сессий создаётся слишком много, может пора как-то оптимизировать ваше приложение, и не создавать сессию для каждого приходящего пользователя независимо от того, нужна она или нет?
Ответ написан
Комментировать
@max_rip
Да сколько у вас сессий?
Если у вас на машине несколько проектов и они не связаны между собой, может имеет смысл раскидать их по разным каталогам, да и как часто вы запускаете проверку?
Ответ написан
alexkbs
@alexkbs
Стоит научить приложения не стартовать сессии когда они не нужны.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽