Ich habe seid einigen Tagen mit einem Problem mit dem Skript "sessionclean" auf meinem Debian Server (Plesk) zu kämpfen. Alles hat ohne Vorwarnung mit einem apt-get upgrade angefangen, bei dem eigentlich nichts wichtiges erneuert worden ist so weit ich das noch weiß. Ab diesem Zeitpunkt erhalte ich alle 30 Minuten eine E-Mail mit dem Inhalt "Segmentation fault" und dem Betreff "Cron <root@srv1> [ -x /usr/lib/php5/sessionclean ] && /usr/lib/php5/sessionclean". Das Problem, weder in der E-Mail noch in log files kann ich eine Bemerkung zu dem eigentlichen Fehler finden. Auch wenn ich das Skript als root aus der Konsole starte "/usr/lib/php5/sessionclean" bricht dieses mit "Segmentation fault" ab. Ich habe einmal den Inhalt des skriptes angehängt, eigentlich macht dieses ja nichts weiter als abgelaufene session files zu bereinigen - ich bin da bei der Fehlersuche wirklich am Ende

Code: Alles auswählen
SAPIS="apache2:apache2 apache2filter:apache2 cgi:php5 fpm:php5-fpm cli:php5"
# Iterate through all web SAPIs
(
proc_names=""
for sapi in ${SAPIS}; do
conf_dir=${sapi%%:*}
proc_name=${sapi##*:}
if [ -e /etc/php5/${conf_dir}/php.ini ]; then
# Get all session variables once so we don't need to start PHP to get each config option
session_config=$(PHP_INI_SCAN_DIR=/etc/php5/${conf_dir}/conf.d/ php5 -c /etc/php5/${conf_dir}/php.ini -d "error_reporting='~$
save_handler=$(echo "$session_config" | sed -ne 's/^session\.save_handler=\(.*\)$/\1/p')
save_path=$(echo "$session_config" | sed -ne 's/^session\.save_path=\(.*;\)\?\(.*\)$/\2/p')
gc_maxlifetime=$(($(echo "$session_config" | sed -ne 's/^session\.gc_maxlifetime=\(.*\)$/\1/p')/60))
if [ "$save_handler" = "files" -a -d "$save_path" ]; then
proc_names="$proc_names $proc_name";
printf "%s:%s\n" "$save_path" "$gc_maxlifetime"
fi
fi
done
# first find all open session files and touch them (hope it's not massive amount of files)
for pid in $(pidof $proc_names); do
find "/proc/$pid/fd" -ignore_readdir_race -lname "$save_path/sess_\*" -exec touch -c {} \; 2>/dev/null
done
) | sort -rn -t: -k2,2 | sort -u -t: -k 1,1 | while IFS=: read -r save_path gc_maxlifetime; do
# find all files older then maxlifetime and delete them
find -O3 "$save_path/" -ignore_readdir_race -depth -mindepth 1 -name 'sess_*' -type f -cmin "+$gc_maxlifetime" -delete
done
exit 0
MfG
Daniil