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.

Rotar logs de apache con logrotate en Linux

linux, servidores web 4 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.

Redirección web con el mod_rewrite de apache

servidores web 11 Comentarios »

mod_rewrite - Redirección web con el mod_rewrite de apacheA continuación detallaré algunas de las opciones que tenemos actualmente para realizar una redirección web utilizando el módulo mod_rewrite de Apache (servidor web) y el archivo de configuración .htaccess.

Además, comentaré cuales son los usos más comunes en la administración de sistemas de estas redirecciones web.

Redirecciones web

  • Redirección 301 Permanente:
    [Uso práctico] Redirección permanente de nuestros dominios secundarios (.com, .net) a nuestro dominio principal (.es), para que los motores de búsqueda no interpreten a nuestros dominios secundarios como contenido duplicado y nos penalicen.
  • Redirección 302 Temporal:
    [Uso práctico] Redirección temporal de nuestra sección de inicio, mientras se están realizando tareas de actualización y/o mantenimiento.

Redireccion con .htaccess

Las redirecciones web se pueden agregar directamente en el fichero de configuración del dominio del servidor web Apache o dentro del fichero .htaccess ubicado en la raíz del sitio.

RewriteEngine On

# Redireccion web permanente 301 de dominios secundarios con y sin las www
RewriteCond %{HTTP_HOST} !^(.*)\.alejandroarco\.es$ [NC]
RewriteRule ^(.*)$ http://www.alejandroarco.es/$1 [R=301,L]

# Redireccion web temporal 302 para tareas de mantenimiento
RewriteRule ^$ /mantenimiento.html$1 [R=302,L]

Si tenéis alguna duda acerca del funcionamiento del ejemplo mostrado en el .htaccess para la redirección web no dudéis en agregar un comentario a este artículo.

Fuente: Alejandro Arco

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