Estou atuando como administrador de sistemas para alguns servidores que possuem sites Magento e, ocasionalmente, eles são preenchidos com arquivos de sessão.
Disseram-me que gerenciar esses arquivos não é algo que pode ser feito no Magento e presumo que o uso temporário deles significa que eles não podem ser desativados, mas parece estranho que o Magento não tenha como lidar com a remoção desses arquivos. arquivos?
Minha solução é um crontab noturno que executa algo assim, find /path/to/magento/sessions/ -name "sess*" -type f -delete
mas parece deselegante para dizer o mínimo.
Qual é a melhor maneira de lidar com isso?
fonte
Com sessões baseadas em arquivo, elas serão removidas automaticamente pelo cron de limpeza da sessão do PHP - portanto, os arquivos provavelmente serão excluídos dentro de ~ 7200 segundos após a criação. Portanto, mesmo em um site ocupado (30 mil exclusivos por dia), geralmente existem apenas cerca de 4.000 arquivos de sessão em ./var/session - o que não é nada para um servidor Linux de baixo custo.
No entanto, a limpeza na verdade depende do cron funcionando - que normalmente não aparece no diretório ./var/session do Magento. Então você deve configurar um novo cron do sistema
O período de limpeza padrão para as sessões é de 7200 segundos, o que deve ser mais do que suficiente, embora você possa alterar o que foi descrito acima.
Com as sessões do Memcache, o TCP / IP é a única sobrecarga - que, para uma implantação de servidor único, o tornaria mais lento que o baseado em arquivos. Então, você usaria um soquete unix, que remove essa sobrecarga e oferece melhor segurança. Ainda assim, as sessões do cliente serão truncadas / limitadas à quantidade de RAM que você pode alocar. A sessão média do Magento é de 4Kb - portanto, você poderá suportar 256 sessões ativas, por MB alocado. Portanto, certifique-se de definir um limite apropriado para evitar que os clientes percam aleatoriamente o carrinho / sessão. E também lembre-se, uma reinicialização do daemon do Memcache apagará todas as sessões existentes (BAD!).
Com o Redis (não nativo, mas disponível por meio de uma extensão), você obtém um nível de suporte semelhante ao Memcache, mas com os benefícios adicionais da persistência (caso deseje usá-lo). Com a extensão Cm_Redis, você também poderá aproveitar a compactação de sessão. Descobrimos que essa extensão funciona muito bem nas implantações CE e EE.
Com o DB, a configuração padrão de expiração da remoção é uma poderosa semana, portanto, com o tamanho da loja acima como exemplo (30 mil exclusivos por dia), você verá um tamanho de tabela de banco de dados para core_cache_session de cerca de 7 GB - o que aumentará sua loja para uma parada completa, para quase todas as operações baseadas em sessões.
Com a experiência de hospedar lojas grandes (230k visitantes únicos por dia) e pequenas (<1k visitantes únicos por dia), nossa recomendação é:
Implantação de servidor único - arquivos
Implantação de vários servidores - Redis (usando um banco de dados separado do cache principal do Magento)
Eu escrevi algumas respostas realmente completas aqui http://magebase.com/magento-tutorials/magento-session-storage-which-to-choose-and-why/comment-page-1/#comment-1980
fonte
Eu fiz uma pergunta relacionada há algum tempo:
https://stackoverflow.com/questions/7828975/php-garbage-collection-clarification
O que eu nunca descobri (deixei esse trabalho para um novo e o problema original se tornou o de outra pessoa) é se as sessões do Magento respeitarão essas configurações ou se implementarão seu tratamento de sessões usando o Zend (e provavelmente algum tipo de zend.ini arquivo de configuração).
As configurações de php para olhar:
session.gc_maxlifetime
session.gc_probability
session.gc_divisor
http://php.net/manual/en/session.configuration.php#ini.session.gc-probability
fonte
Geralmente, um trabalho cron é suficiente, mas aqui estão algumas coisas a serem lembradas:
1) Defina a sessão para durar não mais que
session.gc_maxlifetime
(php -i | grep session.gc_maxlifetime
) segundos (isso configurará sessões expiradas para serem preparadas para coleta de lixo pelo php.ini ou .htaccess)2) Você pode querer armazenar as sessões no banco de dados, veja aqui para obter mais informações sobre como fazer isso (essa opção pode ser mais fácil de gerenciar via módulo magento personalizado)
3) Outra opção a considerar é o Memcached, que também pode acelerar os servidores (embora não esteja completamente conectado à pergunta, acho útil saber)
Consulte esta pergunta para obter mais informações: https://stackoverflow.com/questions/4353875/how-long-do-the-magento-session-files-need-to-be-kept
fonte
find
s todos os arquivos anterioressess.gc_maxlifetime
e os remove. Excluir sessões via cron é um comportamento normal, seguro e aceitável.session.gc_probability
esession.gc_divisor
. Se scripts diferentes tiverem valores diferentes parasession.gc_maxlifetime
aquele com o valor mais baixo, determinará quanto tempo as coisas ficam pendentes desde que o armazenamento da sessão é global e a execução desse script limpará os outros objetos de sessões de scripts.Em todas as nossas configurações, temos um arquivo maintenance.php que cuida da limpeza do diretório logs e var de vez em quando. Como as sessões precisam ser salvas no banco de dados ou no sistema de arquivos, esse arquivo de manutenção os limpará. (Veja o código abaixo).
Você pode executar o seguinte comando como uma tarefa cron para limpar os logs:
O comando acima produzirá a seguinte saída:
Você pode executar o seguinte comando como uma tarefa cron para limpar a pasta var:
O comando acima produzirá a seguinte saída:
O código real (não se esqueça de ajustar o caminho para o seu arquivo local.xml):
fonte
Para o Magento CMS e similares (que não estão limpando sessões antigas), eu apenas uso tarefas cron com base nas configurações do php.ini.
PHP5 / Ubuntu 14.04 / Debian
A configuração cron.d do sistema para php5 não limpa o Magento ./var/session (ou qualquer outra coisa além da pasta de sessão padrão (/ var / lib / php5 para Ubuntu e / var / lib / php5 / sessions ou / tmp / para a maioria dos outros Linux) dists).
Mas você ainda pode usar "sessionclean" e "maxlifetime" conforme o cron padrão do sistema php5 / Debian:
Exemplo que você pode tentar na linha de comando:
Portanto, apenas incorpore isso em um crontab de sistema / raiz ou em um crontab de usuário que tenha permissão de leitura / gravação para os arquivos da sessão:
Adicione isto que você deseja que seja semelhante ao sistema php cron:
ou - já que sabemos que esses arquivos / diretórios existem:
Agora eu tenho uma quantidade gerenciável de sessões e ela é mantida limpa via coleta de lixo padrão / tempo de vida através das configurações do php.ini (cli).
(Você pode deixar o curinga acima ou substituir pelo nome do site.)
EDIT (PHP7 / Ubuntu 16.xx / Debian):
O script 'sessionclean' foi alterado e o script maxlifetime foi removido. Para o trabalho cron do sistema / php, agora é um script. Você realmente não pode mais usar isso, pois as chamadas de arquivo agora estão estáticas no script.
O script php5 sessionclean mais antigo ainda pode funcionar se o sistema não estiver sendo limpo. O que você pode fazer é pegar o Pacote Debian php5 mais antigo e extraí
sessionclean
-lo. Ou você pode simplesmente copiar isso na sua área de scripts (dando / var / www / (site) permissões / propriedade apropriadas):Também recomendo renomeá-lo, para que não seja confundido com o novo cronjob php 'sessionclean'. Você pode então conectar seu próprio número "maxlifetime" da seguinte maneira:
(61 sendo a idade do exemplo (em minutos) e 'MySessionClean' sendo o script php5 renomeado baixado ou copiado de cima).
Dessa maneira, evitamos completamente as chamadas do php.ini / env.
(EDIT 13DEC2016: LINK DE REPOUSO DE ARQUIVO DEBIANO atualizado)
fonte
Limpei o banco de dados regularmente de todos esses arquivos de sessão antigos. Foi um trabalho manual irritante até que eu instalei o Magento Optimizer, o que faz toda essa rotina funcionar para mim. Além disso, meu cache é atualizado constantemente e não o faço manualmente depois de alterar produtos e blocos estáticos. Ah, sim, os relatórios de erro e os carros abandonados também são limpos.
fonte
De todos os comentários acima, acho que essa é a solução fácil e espero que seja melhor que scripts longos e instalar extensões de terceiros para gerenciar arquivos de sessões antigas e manter novos arquivos de sessão.
magento
pasta.fonte
Para o meu caso, eu executo esse script colocado no
magento/var/
diretório para excluir arquivos de sessão com mais de uma semana (-mtime +7
):É o meu primeiro script bash (revisão 2) e acho que pode ser otimizado em vários aspectos. Estou aberto a qualquer sugestão de otimização.
Este script pode ser recuperado em: https://gist.github.com/Nolwennig/a75dc2f8628be2864bb2
fonte
Eu criei um script que esvazia o diretório var / session. Você pode adicioná-lo a um trabalho cron para executar uma vez por dia, o que deve ser suficiente e ajustar conforme necessário. Você notará que quando o diretório da sessão for preenchido, é impossível excluir arquivos via cpanel ou ssh; esse script fará o truque apenas no diretório raiz do magento.
fonte