基于Debian的系统会话在特殊cron中30分钟被杀死,如何覆盖?

2022-01-24 00:00:00 session debian php apache session-timeout

一直在拔头发,试图找出为什么我的会话在 30 分钟时被终止/杀死/破坏.好吧,看起来基于 Debian 的系统运行了一个特殊的 cron,它会忽略所有 php.ini 和 apache 配置,并在 30 分钟后终止任何空闲会话.

Have been pulling out my hair trying to find out why my sessions are being terminated/killed/destroyed at 30 minutes. Well it looks like Debian based systems have a special cron running that ignores all php.ini and apache configurations and kills any idle session at 30 minutes.

cron 路径:/etc/cron.d/php5

在 cron 内部:

# /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 ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm

我不擅长配置和设置主机,但我不是系统管理员.有人可以帮我覆盖/编辑/更改/重新配置它,以便我可以将值设置得更长吗?我认为 3 小时会很好,但我想了解这些变化,所以如果更高层的人想让会话时间更短/更长,我会记录如何配置更改.

I'm not bad at configuring and setting up hosts but I'm no sysAdmin. Could someone please help me override/edit/change/reconfigure this so I can set the value longer? I think 3 hours would be nice but I would like to understand the changes so if someone higher up wants to make the session time shorter/longer I con document how to configure the change.

感谢任何对此的洞察帮助

Thanks to any insight help on this

添加/usr/lib/php5/maxlifetime 代码

Adding /usr/lib/php5/maxlifetime code

#!/bin/sh -e

max=1440

for ini in /etc/php5/*/php.ini; do
        cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*([0-9]+).*$/1/p' $ini 2>/dev/null || true);
        [ -z "$cur" ] && cur=0
        [ "$cur" -gt "$max" ] && max=$cur
done

echo $(($max/60))

exit 0

所以它看起来正在搜索所有 php.ini 文件,找到最大值,将其与 1440(即 24 分钟)进行比较.

so it looks to be searching all the php.ini files, finds the greatest value, compares it to 1440 (which is 24 minutes).

这里是 php.ini 文件

Here are the php.ini files

/etc/php5/apache2/php.ini
session.gc_maxlifetime = 1440 

/etc/php5/cgi/php.ini
session.gc_maxlifetime = 1440

/etc/php5/cli/php.ini
session.gc_maxlifetime = 1440

但为什么我的脚本会话在 30 分钟而不是 24 分钟被终止?

but why does my script session get killed at 30 minutes and not 24 minutes?

编辑#2:CRON 每 30 分钟运行一次,这就是会话看起来以 30 分钟间隔被终止的原因.但也可能是 24 到 54 分钟,仅供参考

EDIT #2: CRON running every 30 minutes is why the session looks to be killed at 30 minute intervals. But it could also be 24 to 54 minutes, FYI

同时查看以下代码:/usr/lib/php5/maxlifetime 它取最高值,在我的测试过程中,我试图降低阈值以加快条件.

Also looking over the code in: /usr/lib/php5/maxlifetime it's taking the highest value and during my testing I was trying to lower the threshold to speed up the condition.

看起来我只需要在 php.ini 文件上增加一个到一个多小时的测试测试.

Looks like I just need to increase one on the php.ini files to over one hour test test.

推荐答案

编辑文件/usr/lib/php5/maxlifetime

该值应以秒为单位.这个文件实际上也会检查你的 php.ini,所以我不知道为什么它不适合你.

The value should be in seconds. This file will actually also check your php.ini so I don't know why it wasn't working for you.

相关文章