Rotar archivos de log con Logrotate

Logrotate es el proceso encargado de rotar, comprimir y enviar por mail los logs de sistema en Linux.

Cuando un paquete individual (como httpd, bacula, vsftpd, yum, etc.) se instala, éste añade en el directorio /etc/logrotate.d/ su fichero de configuración logrotate encargado de la gestión de los logs. Así por ejemplo, Apache añade un fichero similar al siguiente:

[root@server logrotate.d]# cat /etc/logrotate.d/httpd
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}

Si se quieren añadir políticas de rotación de logs para logs que no estén definidos o que no estén en las rutas por defecto, se podrá tocar el fichero de configuración /etc/logrotate.conf

En este fichero (/etc/logrotate.conf), además, se configuran las políticas de rotación de logs comunes a todos los logs. En cada fichero de configuración dentro de /etc/logrotate.d, se pueden sobreescribir las políticas comunes, de forma local, redefiniendo el valor para la variable de configuración deseada. Así por ejemplo, se podría crear un fichero para rotar los logs del tipo /var/log/miapp.log que deja una aplicación concreta, tal y como sigue:

[root@server logrotate.d]# cat /etc/logrotate.d/miapp
/var/log/miapp.log {
weekly
copytruncate
rotate 4
compress
missingok
}

Con la definición anterior, estaríamos inficando:

  • weekly: los logs se rotarán semanalmente.
  • copytruncate: crea una copia del fichero de logs original y después trunca el fichero original a cero bytes, de esta manera «miapp» siempre apuntará al mismo fichero y evitaremos problemas.
  • rotate 4: mantendrá los últimos 5 ficheros (rotará 4 veces).
  • compress: comprime el fichero de log, una vez rotado.
  • missingok: si el fichero de log no existe, no devuelve error.

Logrotate no es un demonio que corre en la máquina. Así pues, tras realizar cualquier cambio en el fichero de configuración, no será necesario realizar ningún restart de ningún servicio. Símplemente, Logrotate usará la nueva configuración en la siguiente ejecución. Si se desea testear Logrotate tras algún cambio en su configuración, se puede ejecutar el comando siguiente:

logrotate -vf /etc/logrotate.conf

PD: Es posible que tras la ejecución del comando anterior, tarde unos segundos en empezar a escribir en el nuevo fichero de logs.

Útil y muy necesario para mantener controlado el espacio usado por los logs.

Fuentes:
http://www.thegeekstuff.com/2010/07/logrotate-examples/
http://www.linuxcommand.org/man_pages/logrotate8.html
http://www.linuxquestions.org/questions/linux-newbie-8/

Instalar y configurar un servidor LAMP

Hoy me lanzo a la piscina con un paso a paso para instalar un servidor LAMP (Linux, Apache, Mysql, Php) y realizar los primeros pasos, en entornos tipo servidor Red Hat (Fedora, CentOS, etc.). Hay muchas formas de hacer ésto, pero la descrita a continuación siempre me suele funcionar:

Primer paso, instalar todos los componentes con yum:

yum install -y httpd php mysql-server mysql php-mysql

Continuar leyendo «Instalar y configurar un servidor LAMP»

Velocidad de tu tarjeta ethernet

Un comando muy útil para ver qué velocidades soporta tu tarjeta de red, y más importante si cabe, a qué velocidad está configurada actualmente, es «ethtool», un comando que podremos encontrar en la mayoría de distribuciones linux.

Un ejemplo de salida sería el siguiente:

[root@server root]# ethtool eth1
Settings for eth1:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/FullSupports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/FullAdvertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: g
Wake-on: g
Link detected: yes

Como se puede ver en el ejemplo, la tarjeta de red eth1 soporta trabajar a 10, 100 y 1000 Mbps,, pero actualmente, está trabajando a 100Mbps, tal y como se puede ver junto a «Speed».

Un comando útil, que ofrece algo más de información que el usual «dmesg | grep eth1».

Fuente: http://linuxhelp.blogspot.com/2005/10/find-speed-of-your-ethernet-card-in.html

Sustitución múltiple

Durante las últimas semanas, me he visto con la necesidad de cambiar una misma línea en cientos de archivos diferentes. Para evitar cambiarlo uno por uno, he buscado por Internet hasta encontrar el comando adecuado, el cual se asemeja mucho al comando de sustitución que tiene ‘vi’:

perl -p -i -e ‘s/DocumentRoot \/usr\/local\/www\/data-dist\//DocumentRoot \/var\/www\//g’ *

En este ejemplo, se buscaría en todos los archivos del directorio actual (*), por la cadena «DocumentRoot /usr/local/www/data-dist» y se sustituiría por «DocumentRoot /var/www».

El comando parece mucho más engorroso, por la necesidad de escapar las «/» que contiene la cadena de búsqueda. En realidad, la sentencia de búsqueda sería la siguiente:

perl -p -i -e ‘s/cadena a buscar/nueva cadena/g’ nombre_ficheros_donde_buscar

Con esto, ya tendríamos la base para realizar sustituciones en múltiples archivos, desde la terminal de nuestra distribución Linux preferida.

 

Fuentes:

http://enavas.blogspot.com/2008/10/reemplazar-texto-en-todos-los-archivos.html
http://es.w3support.net/index.php?db=so&id=1398558

Copia con exclusiones

Imaginemos que tenemos un directorio con decenas de miles de ficheros. Imaginemos ahora que necesitamos copiarlos casi todos, a otro directorio. ¿Cómo conseguimos, mediante un único comando, realizar la copia de todos los ficheros excepto los que no necesitamos copiar?

Una solución sería, estando ubicados en el directorio de origen (que contiene los ficheros) con la siguiente línea:

ls | egrep -v ‘^excepcion1|^excepcion2|^excepcion3’ | xargs -i cp {} /dest_folder/

En esta línea, excepcion1 corresponde con el nombre de un fichero que no queremos copiar (o en el caso de tener varios ficheros cuyo nombre empieza por excepcion1, con todos ellos). Análogamente con excepcion2 y excepcion3. dest_folder, corresponde con el directorio de destino.

Por ejemplo, si se quisieran copiar todos los archivos, excepto los que empiezan por adoc*, data*, table* y user*, se podría usar la siguiente sentencia:

ls | egrep -v ‘^adoc|^data|^table|^user’ | xargs -i cp {} /dest_folder/

NOTA: con ‘^’ se indica que el nombre del archivo (en este caso) ha de empezar con el patrón indicado.