Đối với Magento CMS và những thứ tương tự (không dọn dẹp các phiên cũ), tôi chỉ sử dụng các công việc định kỳ dựa trên cài đặt php.ini.
PHP5 / Ubuntu 14.04 / Debian
Thiết lập cron.d hệ thống cho php5 không dọn sạch Magento ./var/session (hoặc bất cứ thứ gì ngoài thư mục phiên mặc định (/ var / lib / php5 cho Ubuntu và / var / lib / php5 / session hoặc / tmp / cho hầu hết những người khác Linux xa).
Nhưng bạn vẫn có thể sử dụng "sessionclean" và "maxlifetime" theo cron hệ thống php5 / Debian mặc định:
Ví dụ bạn có thể thử từ dòng lệnh:
# sudo /usr/lib/php5/sessionclean /var/www/{yoursite}/var/session $(/usr/lib/php5/maxlifetime)
Vì vậy, chỉ cần kết hợp nó vào một crontab hệ thống / root hoặc một crontab của người dùng có quyền đọc / ghi cho các tệp phiên:
$ sudo crontab -e
Thêm cái này là bạn muốn nó trông giống với hệ thống php cron:
20,40 * * * * [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/www/*/var/session ] && /usr/lib/php5/sessionclean /var/www/{yoursite}/var/session $(/usr/lib/php5/maxlifetime)
hoặc - vì chúng tôi biết những tệp / thư mục đó tồn tại:
20,40 * * * * /usr/lib/php5/sessionclean /var/www/*/var/session $(/usr/lib/php5/maxlifetime)
Bây giờ tôi có số lượng phiên có thể quản lý được và nó được giữ sạch sẽ thông qua bộ sưu tập rác / vòng đời mặc định thông qua cài đặt php.ini (cli).
(Bạn có thể để ký tự đại diện ở trên hoặc thay thế bằng tên trang web.)
EDIT (PHP7 / Ubuntu 16.xx / Debian):
Tập lệnh 'sessionclean' đã thay đổi và tập lệnh maxlifetime đã bị xóa. Đối với công việc cron hệ thống / php, bây giờ nó là một tập lệnh. Bạn thực sự không thể sử dụng điều này nữa vì các cuộc gọi tệp bây giờ là tĩnh đối với tập lệnh.
Tập lệnh sessionclean php5 cũ hơn vẫn có thể hoạt động cho bạn nếu hệ thống không dọn dẹp. Những gì bạn có thể làm là lấy Gói Debian php5 cũ hơn và trích xuất sessionclean
từ nó. Hoặc bạn chỉ có thể sao chép phần này vào vùng tập lệnh của mình (cung cấp quyền / quyền sở hữu / var / www / (trang web) phù hợp):
#!/bin/sh
# first find all used files and touch them (hope it's not massive amount of files)
[ -x /usr/bin/lsof ] && /usr/bin/lsof -w -l +d "${1}" | awk -- '{ if (NR > 1) { print $9; } }' | xargs -i touch -c {}
# find all files older then maxlifetime
find "${1}" -depth -mindepth 1 -maxdepth 1 -ignore_readdir_race -type f -cmin "+${2}" -delete
Tôi cũng khuyên bạn nên đổi tên nó, vì vậy nó không bị nhầm lẫn với cronjob php 'sessionclean' mới. Sau đó, bạn có thể cắm số "maxlifetime" của riêng mình vào như vậy:
20,40 * * * * /home/-username-/scripts/MySessionClean /var/www/*/var/session 61
(61 là tuổi mẫu (tính bằng phút) và 'MySessionClean' là tập lệnh php5 được đổi tên được tải xuống hoặc sao chép từ trên xuống).
Theo cách này, chúng tôi tránh hoàn toàn các cuộc gọi php.ini / env.
(EDIT 13DEC2016: Cập nhật LIÊN KẾT REPBIAN ARCHIVE)