Ich fand einen Weg, um die Fehler zu beseitigen, obwohl alle Wetten aus sind, ob Sie ein Problem beseitigen oder es nur maskieren. Ich habe mehrere Container laufen, und einige haben dieses Problem, andere nicht.
Das Verzeichnis/usr/lib/php5/sessionclean, der den Fehler generiert wird:
#!/bin/sh -e
SAPIS="apache2:apache2\napache2filter:apache2\ncgi:php5\nfpm:php5-fpm\n"
# Iterate through all web SAPIs
(
printf "$SAPIS" | { \
proc_names=""
while IFS=: read -r conf_dir proc_name; do
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=$(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";')
save_handler=$(echo "$session_config" | sed -ne 's/^session\.save_handler=\(.*\)$/\1/p')
save_path=$(echo "$session_config" | sed -ne 's/^session\.save_path=\(.*\)$/\1/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 {} \;
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" -depth -mindepth 1 -name 'sess_*' -ignore_readdir_race -type f -cmin "+$gc_maxlifetime" -delete
done
exit 0
Aber wenn ich ersetzen, dass w/a/usr/lib/php5/sessionclean aus einem Behälter, der nicht der Fall ist den Fehler erzeugen, der ist:
#!/bin/sh -e
SAPIS="apache2:apache2\napache2filter:apache2\ncgi:php5\nfpm:php5-fpm\n"
# Iterate through all web SAPIs
(
proc_names=""
printf "$SAPIS" | \
while IFS=: read -r conf_dir proc_name; do
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=$(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";')
save_handler=$(echo "$session_config" | sed -ne 's/^session\.save_handler=\(.*\)$/\1/p')
save_path=$(echo "$session_config" | sed -ne 's/^session\.save_path=\(.*\)$/\1/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 {} \;
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" -depth -mindepth 1 -name 'sess_*' -ignore_readdir_race -type f -cmin "+$gc_maxlifetime" -delete
done
exit 0
Dann bekomme ich die Fehler nicht.
Haben Sie versucht, die Maschine neu zu starten, die das hostet? ;) Können Sie auch den Pfad der 'session.save_path' Konfiguration bestätigen? –
sessionclean versucht, Sitzungen für nicht vorhandene PHP-Prozesse zu aktualisieren. Vielleicht sollten Sie den Rechner neu starten oder zumindest den Apache neu starten, um die PHP-Prozessinformationen zu aktualisieren. – maxhb
Neustart hilft nicht. Session save_path ist auf:/var/lib/php5/sessions gesetzt Diese Fehler treten nicht jedes Mal auf (Sessionclean läuft alle 30 Minuten und diese Fehler erscheinen manchmal mehrmals am Tag, manchmal nur einmal in mehreren Tagen). Darüber hinaus verwenden die meisten Skripts benutzerdefinierte Session-Handler, was bedeutet, Sitzungen Ordner ist fast immer leer –