Acelerar la carga del terminal borrando logs en Ubuntu

Terminal

Por lo general, al iniciar alguna consola o terminal bash, se leen muchos archivos de configuración por defecto y se abren archivos para guardar los eventos de actividad que van ocurriendo. Aunque es útil, puede ralentizar un poco la carga del terminal.

Normalmente, cuando un sistema lleva mucho tiempo en ejecución o ha pasado bastante tiempo desde que fue instalado por primera vez, se acumulan bastantes logs de actividad de diferentes procesos.

Logrotate es una buena utilidad, activada por defecto en la mayoría de distribuciones para los archivos más importantes y que generan mayor volumen de información. Es muy útil porque ademas comprime los logs y los borra pasado un tiempo.

El problema, es que no todas las configuraciones por defecto de logrotate suministradas por la distribución, pueden resultar útiles para todos los usuarios.

Aunque se puede optar por personalizar logrotate para los archivos necesarios, muchas veces se desconocen cuales son todos los archivos de logs o resulta demasiado tedioso ir configurando todos, incluso aunque utilices sistemas automatizados como Puppet.

De ahí la necesidad de crear un pequeño script de bash, más radical (bajo responsabilidad del usuario) que previo respaldo de todos los logs en el home, borre todos los archivos de log más antiguos que una determinada fecha dada en días y tambien borre archivos rotados con logrotate.

Lo he llamado zerolog y este es código que realiza esas tareas:

#!/usr/bin/env bash

#    zerolog is a bash script for delete common logs on /var/log and
#    avoid fill the disk with rotated files. It backups previously
#    the logs on home folder and it can preserve logs older than
#    a date given on days. This is useful for avoid slow sessions
#    starts on bash terminals.

#    Copyright (C) 2012 by Ángel Guzmán Maeso, shakaran at gmail dot com

#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 3 of the License, or
#    (at your option) any later version.

#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#    GNU General Public License for more details.

#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

usage(){
    echo 'Usage: $0 [DAYS]'
    echo 'DAYS: Remove logs older than DAYS. Default: 0 days'
    exit 1
}

if [ `/usr/bin/id -u` -ne 0 ]; then
    echo 'Please, run this script as root'
    usage
fi

if [ -z "$1" ]; then
    MTIME_DAYS=''
else
    MTIME_DAYS='-mtime +$1'
fi

echo Currently logs size: `du -hs /var/log/ | awk {'print $1'}`
echo 'Backup the log folder on home'
tar zcPf ~/logs-`date '+%m-%d-%y-%H:%M:%S'`.tar.gz /var/log

echo 'Removing rotated log files'
find /var/log/ -type f $MTIME_DAYS -name *.gz -exec rm -rf '{}' \;

echo 'Emptying the logs'
for logs in `find /var/log $MTIME_DAYS -type f`; do > $logs; done

echo Currently logs size: `du -hs /var/log/ | awk {'print $1'}`

El script esta subido a github en:

https://github.com/shakaran/scripts/blob/master/zerolog.sh

Por si alguien quiere hacer fork, modificarlo o en un futuro hago nuevas modificaciones. Esta licenciado bajo GPLv3.

Ejemplos de uso

Para usarlo, requiere ser administrador, ya que no todos los logs pueden borrarse como usuario regular.

Puede usarse como:

$ sudo ./zerolog.sh

Que borrará todos los logs rotados y vaciara existentes, ademas de crear un backup previo en el home del tipo logs-<FECHA>.tar.gz con la fecha actual de la ejecución. Por si quieres conservar los logs o decides restaurarlos por algún motivo.

Si quieres borrar sólo los más antiguos de X días, por ejemplo los más antiguos de hace una semana:

$ sudo ./zerolog.sh 7

Incluso puedes crearte un alias zlog:

$ alias zlog="sudo sh /ruta/zerolog.sh"

También puedes añadir el script como una tarea cron y que se ejecute a diario, por ejemplo:

$ sudo crontab -e

Y añadir:

0 0 * * * sh /ruta/zerolog.sh > /dev/null 2>&1

Por otro lado, si te importan poco tus logs o quieren guardar solo los más recientes, puedes optar por una opción más drástica como:

0 0 * * * find /var/log/ -type f -mtime +7 -exec rm -rf '{}' \; > /dev/null 2>&1

Instalar ZeroC Ice para Python en CentOS 5.7

ZeroC Ice logo
ZeroC Ice logo

Ice o  Internet Communications Engine  es una plataforma middleware orientada a objetos, que permite escribir aplicaciones distribuidas con muy poco coste. Provee herramientas, APIs, bibliotecas y bindings para la construcciones de aplicaciones cliente-servidor de forma escalable.

Es una buena herramienta de trabajo para entornos que sean bastante heterogéneos, donde el cliente y servidor puede estar escritos en lenguajes de programación muy diferentes y ejecutarse sobre plataformas, sistemas operativos o arquitecturas muy variadas.

Su fuerte radica en un gran soporte de tecnologías de red con interacciones a bajo nivel de red, enfoque en la lógica de las aplicaciones y portabilidad de entornos muy diversos.

Otro punto fuerte a destacar es la abstracción de red para detalles como abrir conexiones de red, serializado y des-serializado de datos transmitidos por red, reintentos fallidos de conexión y muchos otros detalles más de bajo nivel que ayudan a simplificar la capa de red.

Soporta bindings con bastantes lenguajes de programación como: 
C++.NETJava,PythonObjective-CRubyPHP, y ActionScript.

Debido a estas características Ice es usado por muchas compañias con misiones críticas en el mundo. La curva de aprendizaje es sencilla y existe una gran infraestructura de aplicaciones técnicas que se demandan.

Ice es software libre bajo licencia GPLv2 y comercializado bajo la marca ZeroC.

Instalación con repositorio

Esta opción de instalación es sencilla y cómoda, pero no esta aconsejada para desarrolladores que necesiten actualizaciones con bastante frecuencia o disponer de una versión determinada.

Descargar el repo (en estos momentos de escribir el artículo para la versión 3.4) desde la página web oficial:

 # wget http://download.zeroc.com/Ice/3.4/rhel6/zeroc-ice-rhel6.repo -O /etc/yum.repos.d/zeroc-ice-rhel6.repo

Activar el repositorio e instalar ZeroC Ice y biblioteca Ice para Python:

 # yum --enablerepo zeroc-ice install -y ice ice-python

Instalación desde fuentes

Si tu necesidad esta más orientada al enfoque desarrollador, puedes compilar la versión que requieras o en desarrollo. En el momento de escribir este artículo se compila para la versión 3.4.2 de Ice.

Instalar portable C preprocessor desde el repo de ZeroC Ice (también puedes optar por bajar y compilar los fuentes de mcpp, pero no es necesario):

# yum install -y mcpp-devel

Después bajamos los fuentes de Ice, descomprimimos y compilamos la versión en C++ y su binding para Python (en este caso para la versión 3.4.2 de Ice). Puedes hacerlo todo en una línea con:

# wget http://zeroc.com/download/Ice/3.4/Ice-3.4.2.tar.gz; tar xvzf Ice-*.tar.gz; cd Ice-*/cpp; make; make install; cd ../py/; make;make install

La instalación de Ice quedará bajo /opt/Ice-3.4.2/ y el binding python sobre /opt/Ice-3.4.2/python. Es importante recalcar que el binding python se asociara con la versión de defecto de Python en el sistema si dispones de varias.

Por último, es necesario indicar el el PATH y el PYTHONPATH del sistema, donde se encuentra la instalación de Ice y su binding de Python:

# export PATH=/opt/Ice-3.4.2/bin:$PATH
# export PYTHONPATH=/opt/Ice-3.4.2/python:$PYTHONPATH