Uno de los problemas que más quebraderos de cabeza tienen los webmaster de sitios Magento, suele residir en la gestión que hace el mismo de su directorio ./var/, y de la falta de mecanismos para el pruning de tablas con logs, que puede llegar a tener un tamaño considerable, lo cual puede ser un problema también a la hora de realizar backup (mysqldump) de MySQL. Es hora sde hacer un mantenimiento de Magento (prunning)
Contenidos
Una versión modificada del script que encontramos en Internet, Magento Log & Cache Maintenance Script, nos servirá para adaptarlo a nuestras necesidades. La modificación fue realizada, ya que el script original usa un sistema bastante inseguro, usando una llamada curl, a un fichero PHP, mediante una URL .
Podríamos poner este fichero en un directorio, protegido por .htaccess pero usar contraseñas en tareas cronjobs, es una merma de seguridad y una mala práctica. Así que usaremos el script en una ubicación no accesible vía web, y en su lugar usaremos php para ejecutarlo con parámetros.
* @copyright Copyright (c) 2006-2013 Crucial Web Hosting, Ltd.
* @link http://www.crucialwebhost.com Crucial Web Hosting
*
* Modificaciones por Castris DOT COM, S.L.
* @author Castris dot com, S.L. abdelkarim [arroba] castris.com
*/
switch($argv[1]) {
case 'log':
clean_log_tables();
case 'var':
clean_var_directory();
case 'log_smtp':
clean_log_smtp();
break;
}
function clean_log_smtp() {
$xml = simplexml_load_file('//app/etc/local.xml', NULL, LIBXML_NOCDATA);
if(is_object($xml)) {
$db['host'] = $xml->global->resources->default_setup->connection->host;
$db['name'] = $xml->global->resources->default_setup->connection->dbname;
$db['user'] = $xml->global->resources->default_setup->connection->username;
$db['pass'] = $xml->global->resources->default_setup->connection->password;
$db['pref'] = $xml->global->resources->db->table_prefix;
$tables = array(
'smtppro_email_log'
);
mysql_connect($db['host'], $db['user'], $db['pass']) or die(mysql_error());
mysql_select_db($db['name']) or die(mysql_error());
foreach($tables as $table) {
@mysql_query('TRUNCATE `'.$db['pref'].$table.'`');
}
} else {
exit('Unable to load local.xml file');
}
}
function clean_log_tables() {
$xml = simplexml_load_file('//app/etc/local.xml', NULL, LIBXML_NOCDATA);
if(is_object($xml)) {
$db['host'] = $xml->global->resources->default_setup->connection->host;
$db['name'] = $xml->global->resources->default_setup->connection->dbname;
$db['user'] = $xml->global->resources->default_setup->connection->username;
$db['pass'] = $xml->global->resources->default_setup->connection->password;
$db['pref'] = $xml->global->resources->db->table_prefix;
$tables = array(
'aw_core_logger',
'dataflow_batch_export',
'dataflow_batch_import',
'log_customer',
'log_quote',
'log_summary',
'log_summary_type',
'log_url',
'log_url_info',
'log_visitor',
'log_visitor_info',
'log_visitor_online',
'index_event',
'report_event',
'report_viewed_product_index',
'report_compared_product_index',
'catalog_compare_item',
'catalogindex_aggregation',
'catalogindex_aggregation_tag',
'catalogindex_aggregation_to_tag'
);
mysql_connect($db['host'], $db['user'], $db['pass']) or die(mysql_error());
mysql_select_db($db['name']) or die(mysql_error());
foreach($tables as $table) {
@mysql_query('TRUNCATE `'.$db['pref'].$table.'`');
}
} else {
exit('Unable to load local.xml file');
}
}
function clean_var_directory() {
$dirs = array(
'downloader/.cache/',
'downloader/pearlib/cache/*',
'downloader/pearlib/download/*',
'media/css/',
'media/css_secure/',
'media/import/',
'media/js/',
'var/cache/',
'var/locks/',
'var/log/',
'var/report/',
'var/session/',
'var/tmp/',
'var/ait_rewrite/'
);
foreach($dirs as $dir) {
exec('rm -rf '.$dir);
}
}
Guardamos el fichero en el directorio donde mantenemos nuestros scripts para ejecutar con las tareas cron (cronjobs).
Creamos una tarea cron desde el shell si nuestro proveedor de hosting nos lo permite, o en su defecto accedemos a nuestro panel de control, para añadir una tarea cron.
El comando a añadir sería uno de estos, o tantas lineas como tareas distintas necesitemos.
sleep ${RANDOM:0:3} php -q //cleanup.php var > /dev/null 2>&1
sleep ${RANDOM:0:3} php -q //cleanup.php log > /dev/null 2>&1
sleep ${RANDOM:0:3} php -q //cleanup.php log_smtp > /dev/null 2>&1
Un ejemplo de linea completa escrita en el shell sería:
@weekly sleep ${RANDOM:0:2}m; php -q /home/usuario/cron/cleanup.php var > /dev/null 2>&1
Las posibilidades de edición con Cpanel serían menores.
Imagen original desde Freepik diseñada por harryarts y retocada por Abdelkarim Mateos
Comparte este artículo
Comparte este articulo en
¡Hola a todos! Vamos a sumergirnos en el fascinante mundo de Mod Security y aprender…
Ya son muchos años en el sector, muchos años pasando por varios paneles de control,…
La lista UCEPROTECT es una herramienta utilizada por muchos administradores de sistemas y proveedores de…
No es la primera vez que me encuentro con el agotamiento de la memoria en…
Descubre cómo solucionar problemas de acceso a servidores con Centos 7, Almalinux 8, Ubuntu 20.04…
Uno de los mensajes más alarmantes que puedes encontrarte es aquel que indica que tu…