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 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.

Comprimir y descomprimir ficheros

linux 1 Comentario »

A continuación mostraré una guía rápida para comprimir y descomprimir ficheros en la consola de Linux con los algoritmos de comprensión más usados actualmente como son: .tar.gzip.tar.gz.bz2.tar.bz2 y los no menos importantes en plataformas Linux, .zip y .rar.

.tar (tar)

  • Comprimir .tar
    tar cvf fichero.tar /var/www/vhosts/*
  • Descomprimir .tar
    tar xvf fichero.tar
  • Listar ficheros .tar
    tar tvf fichero.tar

.gz (gzip)

  • Comprimir .gz
    gzip -q fichero (El archivo lo comprime y lo renombra como “fichero.gz”)
  • Descomprimir .gz
    gzip -d fichero.gz (El archivo lo descomprime y lo deja como “fichero”)
  • Nota: gzip solo comprime ficheros, no directorios.

.tar.gz (tar con gzip)

  • Comprimir .tar.gz
    tar czvf fichero.tar.gz /var/www/vhosts/*
  • Descomprimir .tar.gz
    tar xzvf fichero.tar.gz
  • Listar ficheros .tar.gz
    tar tzvf fichero.tar.gz

.bz2 (bzip2)

  • Comprimir .bz2
    bzip2 fichero (El archivo lo comprime y lo renombra como “fichero.bz2″)
  • Descomprimir .bz2
    bzip2 -d fichero.bz2 (El archivo lo descomprime y lo deja como “fichero”)
  • Nota: bzip2 solo comprime ficheros, no directorios.

.tar.bz2 (tar con bzip2)

  • Comprimir .tar.bz2
    tar -c ficheros | bzip2 > fichero.tar.bz2
  • Descomprimir .tar.bz2
    tar jvxf archivo.tar.bz2
  • Listar ficheros .tar.bz2
    bzip2 -dc fichero.tar.bz2 | tar -tv

.zip (zip)

  • Comprimir .zip
    zip fichero.zip /var/www/vhosts
  • Descomprimir .zip
    unzip fichero.zip
  • Listar ficheros .zip
    unzip -v fichero.zip

.rar (rar)

  • Comprimir .rar
    rar -a fichero.rar /var/www/vhosts
  • Descomprimir .rar
    rar -x fichero.rar
  • Listar ficheros .rar
    rar -v fichero.rar

Los comandos mencionados anteriormente han sido ejecutados correctamente en la distribución de Linux Debian. Espero que esta guía rápida para comprimir y descomprimir ficheros os sea de gran utilidad como lo es para mí.

Fuente: Alejandro Arco

rm ‘Error: Too many arguments’

linux 2 Comentarios »

Too many argumentsLa consola de Linux alguna vez nos ha devuelto a todos por pantalla el error Too many arguments” al intentar realizar un borrado de muchos ficheros. Para solucionar este problema se puede crear un shell script que realice un borrado recursivo, usar tuberías (pipe) usando el comando find y concatenando la tubería junto con el comando xargs entre otras opciones disponibles.

Una de las soluciones más sencilla y eficaz que he encontrado hasta ahora para borrar ficheros en grandes cantidades es usar el comando de ejemplo que muestro a continuación.

Ejemplo para borrar los logs de la carpeta actual (en la que nos encontramos) en una distribución Debian:

find . -name "*.log" -print -exec rm {} \;

Usando este comando no he vuelto a recibir el error Too many arguments” por realizar un borrado de ficheros si el número es muy elevado.

Fuente: Alejandro Arco

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