Alejandro Arco Alejandro Arco

Como reiniciar apache2 debian con crontab

linux, servidores web 2 Comentarios »

apache2 - Como reiniciar apache2 debian con crontabTodos aquellos que gestionamos servidores web dedicados en entornos Linux hemos visto en alguna ocasión como se paran los procesos que gestionan el servicio web (comúnmente apache2 en máquinas con distribuciones Linux).

Para solucionar este problema y poder reiniciar apache2 tenemos varias opciones sencillas: reiniciar apache2 a mano mediante la línea de comandos y/o reiniciar el servicio apache2 periódicamente de forma automática mediante un cron.

Estas soluciones aunque rápidas y efectivas en muchas ocasiones tienen puntos negativos, como por ejemplo, tener que estar presente cuando se cae el servicio web apache2 (para inicializarlo manualmente) y/o tener que reiniciar mediante un cron un servicio web que está funcionando correctamente…

Como reiniciar apache2 debian con crontab

De este modo, propongo una solución igualmente sencilla y más funcional… comprobar periódicamente y de forma automática mediante un cron si el servicio web está operativo y en caso negativo reiniciar apache2 sin necesidad de estar presentes.

A continuación, adjunto el código fuente del shell script para reiniciar apache2 en caso de que no este levantado el servicio web:


#!/bin/bash
######################################################
#
#  APACHE2 RESTART
#
#  This is the main apache2 restart script.
#  By Alejandro Arco - http://www.alejandroarco.es
#
#  This program is free software and is available
#  under the terms of the GNU General Public License.
#
######################################################

set -e

# Variables
NPRO_ACT="$(ps aux | grep apache2 | wc -l)"
NPRO_MIN="1"

# Script
if [ "$NPRO_ACT" -le "$NPRO_MIN" ]; then
/etc/init.d/apache2 restart
fi
  • NPRO_ACT
    Número de procesos de apache2 actuales.
  • NPRO_MIN
    Número de procesos sin iniciar apache2 (comprobar mediante el comando ps aux | grep apache2 | wc -l el número de procesos por defecto).

Posteriormente, tendríamos que darle permisos de ejecución a nuestro shell script para reiniciar apache2 mediante el comando chmod y después, agregar a nuestro cron la periocidad de ejecución del mismo con el comando crontab -e:


#
# Apache2 - reiniciar cada 3 min si no esta activo
#
*/3 * * * * /scripts/apache2/apache2_restart.sh &>/dev/null

Descargar reiniciar apache2 bash script

Os adjunto el fichero apache2_restart.sh para todos aquellos que queráis descargarlo.

Si tenéis alguna duda sobre como usar el shell script para reiniciar apache2 no dudéis en dejarme un comentario, lo responderé a la menor brevedad de tiempo posible.

Borrar ficheros por fecha en linux

linux 3 Comentarios »

linux - Borrar ficheros por fecha en linuxEn algunas ocasiones deseamos borrar ficheros antiguos, para ello basta con conocer la potencia del comando find (ver ayuda con man find), y concatenar la operación que deseamos realizar con -exec, en este caso borrar ficheros por fecha.

El comando find nos permite ejecutar cualquier otro comando, reemplazando {} por cada linea que devuelva el comando find.

En el ejemplo que muestro a continuación voy a borrar archivos por fecha, con una antiguedad mayor a 180 días desde la fecha actual (el número de días variará según las necesidades de cada uno).

# Borrar ficheros por fecha con más de 180 días de antiguedad
find /home/vmail -name "*mail*" -atime +180 -type f -print -exec rm {} \;

Además, en el ejemplo anterior se eliminan todos los ficheros (no directorios) que esten contenidos dentro de la carpeta “/home/vmail” (incluidas subcarpetas) que contengan la cadena “mail” en el nombre del fichero y que tengan una antiguedad superior a 180 días.

Si tenéis alguna duda no dudéis en dejarme un comentario.

Rotar logs de apache con logrotate en Linux

linux, servidores web 5 Comentarios »

logrotate - Rotar logs de apache con logrotate en LinuxUn log es un registro de eventos producidos durante un periodo de tiempo concreto. El servidor web apache almacena en distintos logs (ficheros de registros) la actividad de nuestra aplicación (accesos y errores) de los distintos sitios web que tengamos configurados.

Para evitar que el tamaño de los logs crezca de forma incontrolada se opta por rotarlos, en caso de no hacerlo podremos quedarnos rápidamente sin espacio en disco.

No debemos olvidar que la información recopilada en los ficheros log se debe conservar al menos durante 1 año por eventuales necesidades legales, de este modo, además de rotarlos se opta habitualmente por comprimir logs.

A continuación detallaré como rotar logs de nuestro servidor web apache configurando logrotate pare desempeñar esta función. Los ejemplos mostrados han sido testeados en la distribución Debian de Linux, aunque en las distribuciones más comunes su configuración es similar.

Instalación logrotate - rotar logs de apache con logrotate

La herramienta logrotate ya se encuentra preconfigurada e instalada en la distribución Debian de Linux, de este modo en la mayoría de los casos nos podríamos saltar este paso.

Para instalar el logrotate usaremos la herramienta apt-get (sistema de gestión de paquetes de software):


apt-get update
apt-get install logrotate

Una vez finalizada la instalación de logrotate comprobamos que disponemos de todos los ficheros y carpetas necesarias para su correcto funcionamiento:


/var/lib/logrotate/
/etc/logrotate.d/
/usr/sbin/logrotate
/etc/logrotate.conf

Configurar logrotate - rotar logs de apache con logrotate

Para configurar nuestro logrotate actualizaremos el fichero logrotate.conf:


vi /etc/logrotate.conf

El contenido de nuestro logrotate.conf será similar al mostrado posteriormente:


# ejecutar "man logrotate" para más información

# rotar log semanalmente
weekly

# mantener logs durante 4 semanas
rotate 4

# rotar y crear nuevo log aunque esté vació el anterior
create
# descomentar si quieres comprimir logs
#compress

# ubicación de paquetes para el rotado de logs
include /etc/logrotate.d

# los logs wtmp o btmp los haremos rotar aquí
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

# los logs del sistema se pueden rotar aquí

Crearemos el fichero para rotar logs de apache con logrotate en la distribución Debian de Linux:


vi /etc/logrotate.d/apache2

Y le añadiremos el siguiente contenido al fichero creado anteriormente:

# ubicación de los logs del servidor web apache
/var/log/apache2/*.log {
        weekly
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if [ -f /var/run/apache2.pid ]; then
                        /etc/init.d/apache2 restart > /dev/null
                fi
        endscript
}

# logs de acceso y errores de los sitios web
/var/www/logs/*.log {
        weekly
        missingok
        rotate 52
        compress
        notifempty
        create 640 root root
        sharedscripts
        postrotate
                if [ -f /var/run/apache2.pid ]; then
                        /etc/init.d/apache2 restart > /dev/null
                fi
        endscript
}

Ejecutar logrotate - rotar logs de apache con logrotate

Posteriormente comprobaremos manualmente el correcto funcionamiento de logrotate usando el siguiente comando:

/usr/sbin/logrotate /etc/logrotate.conf -f

Además, logrotate debe ir configurado en un cron para que se ejecute periódicamente, esto podremos hacerlo gracias a la herramienta crontab (ejecuta procesos o scripts a intervalos regulares):

crontab -e

Y agregamos en nuestro archivo crontab el siguiente contenido:

# Rotar logs de apache con logrotate a las 3 am
0 03 * * * root /usr/sbin/logrotate /etc/logrotate.conf > /dev/null 2>&1

Finalmente reiniciaremos el proceso cron para que los cambios surtan efecto:

/etc/init.d/cron restart

No debemos olvidar rotar logs de apache posteriormente de actualizar nuestro sistema de estadísticas web (por ejemplo a la 1 am), ya que de no hacerlo perderíamos información.

El rotado de logs descrito anteriormente lo podemos aplicar a cualquier otra herramienta del sistema. De este modo, espero que este artículo os sea de gran utilidad no sólo para este caso sino para muchos otros.

Cualquier duda que tengáis podemos tratarla a través de los comentarios.

Virtualización sistemas, VirtualBox 2.1.0

software libre 5 Comentarios »

Hace escasos días fue publicada la nueva versión de VirtualBox 2.1.0 para la virtualización de sistemas operativos. Virtualizar un sistema operativo es una tarea sencilla gracias a VirtualBox, es un sistema de virtualización por software libre propiedad de la empresa Sun Microsystems con licencia GPL disponible para todas las plataformas que compite con sus homólogos VMware (VM de Virtual Machine) y Virtual PC.

virtualizacion-sistemas - Virtualización sistemas, VirtualBox 2.1.0

Esta nueva versión de VirtualBox incluye las siguientes características para la virtualización de sistemas:

  • Virtualización de hardware (VT-x y AMD-V) en host Mac OS X
  • Mejoras en la virtualizatión EPT y VPID
  • Virtualización VMDK/VHD
  • Motor NAT con mejor rendimento y ICMP echo (ping)
  • Configuración e implementación más sencilla para hosts Windows y Linux
  • Virtualización de sistemas opetativos guest de 64 bits en host de 32bit
  • Mejoras en la virtualización sistemas (EPT y VPID) para Intel Nehalem
  • Virtualizar sistemas para aceleración 3D utilizando OpenGL
  • Virtualizar controladores LsiLogic y BusLogic SCSI

La nueva versión del sistema de virtualización VirtualBox nos trae un amplio número de mejoras, entre ellas algunas muy esperadas como la mejora del soporte 3D para la aceleración de sistemas utilizando OpenGL.

Espero que disfrutéis de este software de virtualización sistemas tanto como lo hago yo. ¿Lo habéis usado alguna vez?

MySQL, backup con mysqldump

bases de datos 4 Comentarios »

mysql - MySQL, backup con mysqldumpMySQL es un sistema gestor de bases de datos relacionales muy extendido y desarrollado como software libre con licencia GNU GPL.

El sistema gestor de bases de datos mysql es muy popular en el desarrollo web de aplicaciones bajo entornos Linux y Windows, por lo que es necesario en la administración de sistemas realizar políticas de copias de seguridad de nuestras bases de datos mysql con mysqldump.

MySQL, backup con mysqldump

Para realizar la copia de seguridad con mysqldump nuestro usuario tiene que tener los permisos necesarios para poder realizarla. Posteriormente la consola nos pedirá que introduzcamos el password del usuario gracias al atributo -p del comando mysqldump:

  • Ejemplo de backup mysql de una base de datos y todas sus tablas:
    mysqldump --opt -u nombre_usuario -p base_datos > copia_seguridad.sql
  • Ejemplo de un backup con mysqldump con compresión gzip (entornos Linux):
    mysqldump --opt -u nombre_usuario -p base_datos nombre_tabla1 | gzip > copia_seguridad.sql.gz
  • Ejemplo de copia de seguridad mysql de una tabla de una base de datos:
    mysqldump --opt -u nombre_usuario -p base_datos nombre_tabla1 > copia_seguridad.sql

Si deseamos comprimir y descomprimir ficheros posteriormente a la realización del backup con mysqldump, recomiendo visitar el enlace adjuntado (entornos Linux).

MySQL, restaurar base de datos con mysql

  • Para restaurar un backup mysql de una base de datos, nuestro usuario tiene que tener los permisos de escritura necesarios asignados a la base de datos que deseamos importar:
    mysql -u nombre_usuario -p base_datos < copia_seguridad.sql

Si queremos exportar o importar bases de datos mysql con características más concretas, recomiendo ver la ayuda del comando mysqldump y mysql respectivamente.

Las dudas respecto a la realización de copias de seguridad en mysql las responderé en los comentarios.

Publicado por Alejandro Arco.Gracias WordPress & N.Design Studio.