Ich hab die cron.php.sh mal angepasst. So würde die immer die richtige php.ini laden. Es sei denn, wir bekommen PHP 8. Aber dafür sollte das Script komplett überarbeitet werden, und ggf. die PHP-Conf-Ordner immer mit zweistelligen Versionsnummer angegeben werden: also 70, statt 7.
Zunächst habe ich die Suche anpasst:
# detect version of default PHP-CLI binary:
PHPVERSION=`php -r 'echo phpversion();' | sed -e 's/\.//g' | cut -c1-2`
ergibt z.b. 56, 70, 71 etc.
Den Ordner /var/www/kunde/conf/php70/ gibt es nicht, der heißt schlicht php7. Von daher muss das gefiltert werden:
if [ '$PHPVERSION' = '70' ]; then
PHPVERSION="7"
fi
Für die Abfrage, ob es sich um 5 oder 7 handelt, brauchen wir noch die Major-Version:
PHPMAJOR=`echo $PHPVERSION | cut -c1`
Dann könnte die ini dynamischer als bisher geladen werden:
if [ 'x$PHPMAJOR' = 'x7' ] && [ -e '$cust/conf/php$PHPVERSION/php.ini' ]; then
cur=$(php -c "$cust/conf/php$PHPVERSION/php.ini" -d "error_reporting='E_ALL & ~E_DEPRECATED'" -r 'print ini_get("session.gc_maxlifetime");')
elif [ -e '$cust/.php5/php.ini' ]; then
...
Den PHP 5-Block hab ich absichtlich unangetastet gelassen. Da ist scheinbar eine Rückwärtskompatibilität eingebaut worden.
Das ganze Script sieht so bei mir aus:
#!/bin/sh
# _ _ ___ __ _ (R)
# | | (_)_ _____ / __|___ _ _ / _(_)__ _
# | |__| \ V / -_) (__/ _ \ ' \| _| / _` |
# |____|_|\_/\___|\___\___/_||_|_| |_\__, |
# |___/
# Copyright (c) 2009-2017 Keppler IT GmbH.
# ----------------------------------------------------------------------------
# common/tools/cron.php.sh
# $Id: cron.php.sh 4773 2017-11-29 08:39:13Z kk $
#
# Shell script to remove expired PHP session files (via cron)
# Inspired by Debian's /usr/lib/php5/maxlifetime and /etc/cron.d/php5
# ----------------------------------------------------------------------------
set -e
. /etc/liveconfig/sysconfig || exit 0
# Default expire time: 1440 seconds = 24 minutes
EXPIRE=1440
if which php >/dev/null 2>&1 && [ -d '$LC_WEBROOT' ]; then
# detect version of default PHP-CLI binary:
PHPVERSION=`php -r 'echo phpversion();' | sed -e 's/\.//g' | cut -c1-2`
if [ '$PHPVERSION' = '70' ]; then
PHPVERSION="7"
fi
PHPMAJOR=`echo $PHPVERSION | cut -c1`
for cust in $LC_WEBROOT/*; do
[ -d '$cust' -a -d '$cust/tmp' ] || continue
# get session.gc_maxlifetime
max=$EXPIRE
if [ 'x$PHPMAJOR' = 'x7' ] && [ -e '$cust/conf/php$PHPVERSION/php.ini' ]; then
cur=$(php -c "$cust/conf/php$PHPVERSION/php.ini" -d "error_reporting='E_ALL & ~E_DEPRECATED'" -r 'print ini_get("session.gc_maxlifetime");')
elif [ -e '$cust/.php5/php.ini' ]; then
cur=$(php -c "$cust/.php5/php.ini" -d "error_reporting='E_ALL & ~E_DEPRECATED'" -r 'print ini_get("session.gc_maxlifetime");')
elif [ -e '$cust/conf/php5/php.ini' ]; then
cur=$(php -c "$cust/conf/php5/php.ini" -d "error_reporting='E_ALL & ~E_DEPRECATED'" -r 'print ini_get("session.gc_maxlifetime");')
fi
[ -z '$cur' ] && cur=0
[ '$cur' -gt '$max' ] && max=$cur
max=$(($max/60))
find "$cust/tmp" -type f -cmin +$max -regex ".*/sess_[a-z0-9]*" -delete
done
fi
exit 0
Alles anzeigen