一切都从 MySQL 无法启动开始。
经过一些网络搜索后,我发现服务器的 inode 用完了。
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/simfs 500000 500000 0 100% /
none 131072 56 131016 1% /dev
none 131072 1 131071 1% /sys/fs/cgroup
none 131072 63 131009 1% /run
none 131072 4 131068 1% /run/lock
none 131072 1 131071 1% /run/shm
none 131072 1 131071 1% /run/user
进一步的谷歌搜索使我假设 PHP 会话文件永远不会被删除......这似乎是正确的,因为运行ls php5 | wc -l
给了我424669
!
我读到 PHP.ini session.gc_probability 默认设置为 0,并且 ubuntu 通过 cronjob 处理清理/etc/cron.d/php5.
/etc/cron.d/php5
# /etc/cron.d/php5: crontab fragment for php5
# This purges session files older than X, where X is defined in seconds
# as the largest value of session.gc_maxlifetime from all your php.ini
# files, or 24 minutes if not defined. See /usr/lib/php5/maxlifetime
#Look for and purge old sessions every 30 minutes
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime)
这看起来是对的,那么为什么这个脚本不起作用?有没有办法确认它确实每 30 分钟运行一次?
答案1
PHP 会话文件永远不会被删除
您没有说明您使用的是哪种会话处理程序 - 假设它是默认的,则每当触发会话垃圾收集时,过期的会话都应被清除。您的 session.cache_expire 太高和/或 session.gc_probability 太低,和/或 session.gc_divisor 太高。
session.gc_probability 默认设置为 0
不可以 - 只适用于 Debian 系统(Ubuntu 源自 Debian)。Debian 上的某个人认为有奇怪的权限会话存储可以防止会话劫持。实际上它只处理非常可能的攻击的狭窄子集——当你采取适当的措施来处理更可能的攻击媒介时,问题就会消失。
这样做的结果是,如果您想以 Debian 预先确定的方式以外的任何方式管理您的 PHP 会话,您需要 root 访问权限。
我主要喜欢 Debian - 但这总让我觉得很傻。
答案2
由于您以 Root 身份运行它,因此您可以使用 Logger 命令写入 syslog。
&& logger -t PHP_SESSIONS “PHP 会话已清除”
然后 ”cat /var/log/syslog | grep PHP_SESSIONS“稍后查看其运行的时间。
当然,这只是告诉您 cron 作业已运行,而不是告诉您它是否成功。