Esgotando inodes constantemente, sessionclean vomitando erros

0

Eu continuo ficando sem inodes (Ubuntu 14.04).

No meu e-mail raiz, recebo a seguinte mensagem:

From [email protected]  Sun May 29 04:09:01 2016
Return-Path: <[email protected]>
X-Original-To: root
Delivered-To: [email protected]
Received: by web.site.com (Postfix, from userid 0)
    id 7D8B41A230A; Sun, 29 May 2016 04:09:01 -0400 (EDT)
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <root@web>   [ -x /usr/lib/php5/sessionclean ] && /usr/lib/php5/sessionclean
Content-Type: text/plain; charset=ANSI_X3.4-1968
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
Message-Id: <[email protected]>
Date: Sun, 29 May 2016 04:09:01 -0400 (EDT)

/usr/lib/php5/sessionclean: 12: /usr/lib/php5/sessionclean: php5: not found

Eu acredito que a última parte se refere à linha 12 do arquivo sessionclean? Aqui está isso:

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";')

Meu arquivo php.ini é armazenado em ... / php5 / cli / php.ini. Eu até editei o arquivo sessionclean para referir-me expressamente ao arquivo php.ini, e enquanto o erro ao executar o comando sessionclean é interrompido, minhas sessões ainda não estão limpas.

Eu também estou executando o HHVM e fiz algumas alterações na configuração do meu HHVM (/etc/hhvm/php.ini) da seguinte forma:

session.save_handler = files
session.save_path = /var/lib/php5/sessions
session.gc_probability = 0
session.gc_maxlifetime = 1440

Eu também tentei editar o caminho para salvar / var / lib / hhvm / sessions e executar o comando sessionclean novamente e isso não funciona.

No momento, a única maneira de limpar as sessões é manualmente, usando o seguinte comando:

cd /var/lib/php5 OR .../hhvm
find . -name "sess_*" -print | xargs rm -v

Alguém tem alguma ideia?

    
por Matt 31.05.2016 / 12:51

1 resposta

0

Eu resolvi isso alterando o diretório de sessões para / var / lib / php / sessions em /etc/hhvm/php.ini. E também codificar as variáveis no script sessionclean / usr / lib / php5 / sessionclean

#!/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/cli/php.ini ]; then
        # Get all session variables once so we don't need to start PHP to get each config option
        session_config=$(/usr/bin/php -c /etc/php5/cli/php.ini -d "error_reporting='~E_ALL'" -r 'foreach(ini_get_all("session") as $k => $v) echo "$k=".$v["local_value"]."\n";')
        save_handler=files
        save_path=/var/lib/php/sessions
        gc_maxlifetime=1440
        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
    
por Matt 04.06.2016 / 12:49