Mostrar mensagens com a etiqueta Linux. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Linux. Mostrar todas as mensagens

terça-feira, 19 de abril de 2016

Sessões e lentidão no Magento


Uma das maiores plataformas de lojas online é sem dúvida a Magento, apesar do meu contacto com esta plataforma não ter passado de instalação e configurações iniciais, desta vez foi me pedido para analisar e solucionar um problema nesta plataforma.

Foi reportado uma instabilidade na plataforma, dificuldades de acesso, extrema lentidão em resumo algo que não é compatível com quem pretende usar a 100% da plataforma.

Motivo:
O sistema Magento, guarda as sessões dos utilizadores em ficheiros, sessões essas que neste caso, nunca foram apagadas desde que o sistema ficou online, ficando a pasta com +/- 200,000 ficheiros.

Tentou-se eliminar os ficheiros via FTP, via FileExplorer dentro do Plesk mas devido ao numero elevado de ficheiros tornava qualquer ideia um fiasco.

Ainda surgiu a possibilidade de um acesso por terminal, mas a empresa de alojamento não cedeu acessos em tempo útil.

Tentei ainda usar um ficheiro .php com a função unlink que já resolveu outros casos, mas ao requisitar o ficheiro, o próprio browser entrava em colapso.

Solução:

Ao fim de todas estas tentativas frustradas, surge a solução repartida em duas partes:

  • ficheiro .php para ser invocado pelo browser
  • ficheiro .py para executar a acção de remover dentro do servidor (S.O. Linux)

Nota: Deixo apenas as linhas gerais dos ficheiros iniciais, no fim deixo o download de versões melhoradas.
Nota 2: Não me responsabilizo pelo uso destes ficheiros indevidamente ou sem saber o que está a fazer.

Fazer upload para a pasta de root_site (www, http_docs, ...)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
// mag_session_rm.php simplified
// Retorn path real do servidor
$fp = realpath(dirname(__FILE__))."/var";
// Confirma que o ficheiro python esta na pasta "var"
if(file_exists($fp."/session_rm.py")){
  // Troca para o pasta "var"
  chdir($fp);
  // Executa o shell_exec para iniciar rm_sessions.py
  shell_exec("python session_rm.py");
}

Fazer upload para a pasta root_site/var
1
2
3
4
5
6
7
8
"""
USE THIS SCRIPT CAREFULLY - mag_session_rm.py
"""
#!/usr/bin/python
import os

# Chama as funções de sistema operativo para remover
os.popen("rm -f ./session/*")


O caminho que pretendemos afetar fica em root_site/var/sessions
Fiz ficheiros em locais diferentes, para tentar minimizar tentativas de acessos/adulteração dos ficheiros.

Por fim pelo browser aceder ao url do site ex: www.lojaonline.com/mag_session_rm.php

Aguardar uns segundos/minutos dependendo da quantidade de ficheiros e em pouco tempo a sua loja Magento está de novo em pleno.

[Download] Neste ficheiro vai encontrar os dois ficheiros, mas o de php tem implementado um formulário onde pede uma password que deve ser definida pelo leitor.


1
20
21
22
<?php
// Minimal Security - SHA1 Password 
// Get One in www.sha1-online.com
$safePasswd = "22bf5d4a65ff0792ed773c17fa7178ed1cf76aa6";

Obrigado pela atenção

sexta-feira, 21 de setembro de 2012

MySQL Multi-Premissões em servidores remotos

No seguimento da publicação anterior, foi-me sugerido uma situação um pouco diferente, que é quando necessitamos de fazer exactamente a mesma operação mas com recurso à consola.

É verdade que é possível conectar um software de gestão de base de dados ao servidor remoto, mas também é verdade que nem sempre que tem servidor disponibiliza esse acesso assim como pode aumentar o risco de ataque ao sistema.

A informação que se segue foi testada e elaborada com recurso um MySQL Server instalado num computador com Ubuntu Linux, mas o importante é existir um acesso ao servidor.

Aceder ao MySQL

 mysql -u root -p 
após o enter aguarda que se escreva a password de acesso.
Nota: exemplo com root, mas pode ser qualquer utilizador desde que tenha acesso total

Após aceder com sucesso ao mysql a consola passa ter a informação que passa a aceitar comandos para o mysql aparecendo no inicio mysql> 



Criar novo utilizado

 CREATE USER 'blogUser'@'localhost' IDENTIFIED BY 'uma_password'; 

CREATE USER - É o comando principal
- Entre plicas ( ' ) o nome do utilizador seguido de um at (arroba) @ e entre plicas o localhost
Nota: se quiser acesso exterior em vez de localhost deverá usar o símbolo de percentagem (%) 
IDENTIFIED BY - Refere que o utilizador vai ter uma password de acesso
- Entre plicas a password
- Não esquecer de terminar com ponto e virgula (;) se não a consola ao carregar no enter vai passar para uma linha com o simbolo -> se isto acontecer, basta aplicar o ; e enter.

No fim deverá receber a seguinte mensagem na janela
 Query OK, 0 rows affected (0.00 sec) 

Agora saia da consola do MySQL
 quit 

Mais informações aqui

Criar ficheiro de SQL

Para usar o código de criar as permissões referido na publicação anterior  pode fazer de várias maneiras:
- Usar um editor de texto na consola (vi, nano, pico),
- Enviar o ficheiro por SSH ou FTP

Nota: Garanta que sabe a localização de onde coloca o ficheiro.

Executar ficheiro SQL e exportar o resultado

Para executar o ficheiro escreva o seguinte comando:
 mysql -u root -p 'blogBD' < /dir/sql/ficheiro.sql > /dir/sql/resultado.sql 

- Sendo 'blogBD' o nome da base de dados de destino

A consola volta a pedir a password, e se tudo estiver correcto volta à condição inicial, sendo que o ficheiro resultado.sql foi criado na directoria indicada.

Verificar ficheiro SQL

Agora é necessário dar uma vista de olhos no ficheiro, navegue até à pasta, e edite o ficheiro, neste caso é mesmo necessário porque o titulo da coluna também é exportada, logo tem que remover a 1ª linha do ficheiro.

Para tornar o processo mais rápido, pode adicionar no fim do ficheiro o comando:
 FLUSH PRIVILEGES; 

Executar ficheiro SQL

Por fim, com o ficheiro já operacional, basta indicar o seguinte comando:
 mysql -u root -p 'blogBD' < /dir/sql/resultado.sql; 

- Sendo 'blogBD' o nome da base de dados que vai receber a informação

Testar novo utilizador

Agora que o novo utilizador foi criado e os privilégios atribuídos, pode fazer o teste fazendo login e acedendo à base de dados, com os seguintes comandos:
 mysql -u blogUser -p 
 USE blogBD 
 SHOW TABLES 

--------------------------------------------
Bom Fim de Semana, se tiverem questões disponham e comentar ou enviar email.

terça-feira, 21 de agosto de 2012

5, 4, 3, 2 ,1 - vamos lá arrancar com isto

É verdade, este blog vai mesmo arrancar.

Era uma ideia já com um tempo, visto que tenho uma ligação de alguns anos com a área da informática e como vou tendo de vez em quando uns problemas em mãos, lembrei-me que o blog é o local onde posso partilhar esses problemas, mas principalmente as soluções encontradas.

Assim sendo, quem vier visitar este espaço, irá encontrar problemas diversos sobre informática, que vão desde hardware, redes, sistemas operativos (Windows, Linux, OSX), programação, telemóveis e electrónica.

Todos os visitantes estão convidados a colocar questões, as quais terei todo o gosto em responder.