Проблема с удалением PHP сессий
Описание проблемы:
Удалить сотни-тысячи-миллионы файлов в каталоге:
Документация PHP.NET
Что настроить, чтобы такого не было:
Пример
session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440
UPDATE
Посмотреть количество файлов в mod-tmp
ls -R /var/www/*/data/mod-tmp | wc -l ls -R /var/www/*/data/bin-tmp | wc -l
Удалить
find /var/www/*/data/mod-tmp -name "sess_*" -type f -exec rm {} \; find /var/www/*/data/bin-tmp -name "sess_*" -type f -exec rm {} \;
Если файлов очень много, то появится ошибка find: cannot fork: Cannot allocate memory.
Новый вариант с nice (searchengines)
nice -n 19 ionice -c3 find /var/www/user1/data/mod-tmp/ -maxdepth 1 -type f -name sess* | xargs -n1 nice -n 19 ionice -c3 rm
Ещё один вариант
cd /root/ mkdir empty_dir rsync -a --delete /root/empty_dir/ /var/www/user1/data/mod-tmp/
tmpwatch/tmpreaper + ionice.
The tmpwatch utility recursively searches through specified directories and removes files which have not been accessed in a specified period of time. Tmpwatch is normally used to clean up directories which are used for temporarily holding files (for example, /tmp). Tmpwatch ignores symlinks, won't switch filesystems and only removes empty directories and regular files.
Поискав более изящные решения нашёл интересные ссылки
UPD май-2021 - Cleanup PHP Sessions like a PRO
Пример GC для разных сайтов
/usr/bin/php -d session.save_path=/srv/www/foo.example.com/sessions \ -d session.gc_probability=1 \ -d session.gc_divisor=1 \ -d session.gc_maxlifetime=86400 \ -r "session_start(); session_destroy();" /usr/bin/php -d session.save_path=/srv/www/bar.example.com/sessions \ -d session.gc_probability=1 \ -d session.gc_divisor=1 \ -d session.gc_maxlifetime=3600 \ -r "session_start(); session_destroy();"
9,39 * * * * /usr/bin/php -d session.save_path=/srv/www/foo.example.com/sessions -d session.gc_probability=1 -d session.gc_divisor=1 -d session.gc_maxlifetime=86400 -r "session_start(); session_destroy();" 19,49 * * * * /usr/bin/php -d session.save_path=/srv/www/bar.example.com/sessions -d session.gc_probability=1 -d session.gc_divisor=1 -d session.gc_maxlifetime=3600 -r "session_start(); session_destroy();"
Обсуждение