我的一台 Debian 机器的 inode 最近已满,罪魁祸首就是/var/lib/php5/sessions
,它积累了 250 万个临时会话文件,尽管按理说只要文件存在超过 24 分钟就应该清理。
Debian 使用了 PHP 的原生垃圾收集功能,而是使用一个名为 的程序/usr/lib/php5/sessionclean
来完成这项工作。我的版本是 2 月 8 日发布的,应该是 Debian Jessie 上的最新版本。它悄无声息地退出了,但据我所知,什么也没做。
我查看了代码,发现了这一行:
session_config=$(PHP_INI_SCAN_DIR=/etc/php5/${conf_dir}/conf.d/ php5 -c /etc/php5/${conf_dir}/php.ini -d "error_reporting='~E_ALL'" -r 'foreach(ini_get_all("session") as $k => $v) echo "$k=".$v["local_value"]."\n";')
这似乎是在运行最新 Jessie 的多台机器上一致的。
据我所知,这不起作用,而且永远不会起作用,因为它试图运行/etc/php5/apache2/conf.d/ php5
而不是/etc/php5/apache2/conf.d/php5
。但即使把它们放回去,我仍然不断收到错误,这次是关于“-c”选项的。
关于如何使其正常工作以及为什么开箱即用的 debian 会失败,您有什么想法吗?
答案1
中的空格/etc/php5/apache2/conf.d/ php5
是正确的(php5
二进制文件不在配置目录中!)。
就我而言,我的 php.ini 中有一些不再受支持的配置行,这导致 sessionclean 脚本无法读取 php.ini。
使用此命令检查您的配置。
php -e -c /etc/php5/apache2/php.ini -d display_errors=on -r 'echo "OK\n";';
我收到以下警告
Fatal error: Directive 'magic_quotes_gpc' is no longer available in PHP in Unknown on line 0
从您的配置中删除那些无效值,现在 sessionclean 脚本可以读取您的配置文件。