สำหรับ Magento CMS และสิ่งที่ชอบ (ที่ไม่ได้ทำความสะอาดเซสชันเก่า) ฉันใช้ cron jobs ตามการตั้งค่า php.ini
PHP5 / Ubuntu 14.04 / Debian
การตั้งค่าระบบ cron.d สำหรับ php5 ไม่ได้ทำความสะอาด Magento ./var/session (หรือสิ่งอื่นใดนอกจากโฟลเดอร์เซสชั่นเริ่มต้น (/ var / lib / php5 สำหรับ Ubuntu และ / var / lib / php5 / เซสชันหรือ / tmp / สำหรับ Linux อื่น ๆ ส่วนใหญ่) dists)
แต่คุณยังสามารถใช้ "sessionclean" และ "maxlifetime" ตามค่าเริ่มต้น php5 / Debian ระบบ cron:
ตัวอย่างที่คุณสามารถลองจากบรรทัดคำสั่ง:
# sudo /usr/lib/php5/sessionclean /var/www/{yoursite}/var/session $(/usr/lib/php5/maxlifetime)
ดังนั้นเพียงแค่รวมสิ่งนั้นลงในระบบ / root crontab หรือ crontab ของผู้ใช้ที่ได้รับอนุญาตให้อ่าน / เขียนไฟล์เซสชั่น:
$ sudo crontab -e
เพิ่มนี่คือคุณต้องการให้มันดูคล้ายกับระบบ 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)
หรือ - เนื่องจากเรารู้ว่ามีไฟล์ / dirs อยู่:
20,40 * * * * /usr/lib/php5/sessionclean /var/www/*/var/session $(/usr/lib/php5/maxlifetime)
ตอนนี้ฉันมีจำนวนเซสชันที่จัดการได้และมันสะอาดผ่านการเก็บขยะเริ่มต้น / อายุการใช้งานผ่านการตั้งค่า php.ini (cli)
(คุณอาจทิ้งไวลด์การ์ดไว้ด้านบนหรือแทนที่ด้วยชื่อผู้ใช้)
แก้ไข (PHP7 / Ubuntu 16.xx / Debian):
สคริปต์ 'sessionclean' มีการเปลี่ยนแปลงและสคริปต์ maxlifetime ถูกลบแล้ว สำหรับงาน system / php cron ตอนนี้เป็นหนึ่งสคริปต์ คุณไม่สามารถใช้สิ่งนี้ได้อีกต่อไปเนื่องจากการเรียกใช้ไฟล์คงที่กับสคริปต์
สคริปต์เซสชันสะอาด php5 รุ่นเก่ายังคงสามารถทำงานให้คุณได้หากระบบไม่ได้ล้างข้อมูล สิ่งที่คุณสามารถทำได้คือคว้าDebian php5 Packageรุ่นเก่าและดึงsessionclean
ออกมาจากมัน หรือคุณสามารถคัดลอกสิ่งนี้ไปยังพื้นที่สคริปต์ของคุณ (ให้สิทธิ์ / var / www / (ไซต์) ที่เหมาะสม / เป็นเจ้าของ):
#!/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
ฉันยังแนะนำให้เปลี่ยนชื่อมันจึงไม่สับสนกับ phron 'sessionclean' cronjob ใหม่ จากนั้นคุณสามารถเสียบหมายเลข "maxlifetime" ของคุณเองได้ดังนี้:
20,40 * * * * /home/-username-/scripts/MySessionClean /var/www/*/var/session 61
(61 เป็นอายุตัวอย่าง (เป็นนาที) และ 'MySessionClean' เป็นสคริปต์ php5 ที่ถูกเปลี่ยนชื่อที่ดาวน์โหลดหรือคัดลอกมาจากด้านบน)
ด้วยวิธีนี้เราจะหลีกเลี่ยงการโทร php.ini / env โดยสิ้นเชิง
(แก้ไข 13DEC2016: อัปเดตลิงก์คลังข้อมูล DEBIAN ล่าสุด)