Crontab en Linux: Tutorial de configuración paso a paso

El crontab en Linux es una herramienta que nos permite programar tareas para que se ejecuten de manera automática en un momento en el tiempo que especifiquemos. En este pequeño tutorial veremos el proceso de configuración del crontab, incluyendo ejemplos prácticos para activar varias configuraciones.

¿Qué es Crontab?

Crontab (acrónimo de cron table) es un archivo de texto que contiene una lista de comandos que serán ejecutados de forma repetitiva en aquel momento en el tiempo que definamos. Cron es un daemon que lee este archivo y ejecuta los comandos cuando el tiempo definido coincida con el momento actual.

El crontab es una herramienta estándar que se encuentra en la mayoría de las distribuciones de Linux, ya que es una parte integral del sistema para la automatización de tareas. A continuación, se enumeran algunas de las distribuciones de Linux más comunes en las que se puede encontrar crontab:

  1. Ubuntu: Una de las distribuciones más populares y amigables para el usuario, basada en Debian.
  2. Debian: Conocida por su estabilidad y su filosofía de software libre, es la base para muchas otras distribuciones, incluida Ubuntu.
  3. CentOS: Una distribución derivada de Red Hat Enterprise Linux (RHEL), enfocada en la estabilidad y la seguridad.
  4. Red Hat Enterprise Linux (RHEL): Orientada al mercado empresarial, ofrece soporte a largo plazo y es conocida por su robustez.
  5. Fedora: Patrocinada por Red Hat, es conocida por ser una plataforma para la innovación y la tecnología de vanguardia.
  6. Arch Linux: Conocida por su simplicidad y control total por parte del usuario, sigue la filosofía KISS (Keep It Simple, Stupid).
  7. openSUSE: Ofrece tanto una versión de lanzamiento continuo (Tumbleweed) como una de lanzamiento fijo (Leap), y es conocida por su herramienta de administración Yast.
  8. Linux Mint: Basada en Ubuntu y Debian, es popular por su facilidad de uso y su enfoque en la experiencia de escritorio.
  9. Manjaro: Basada en Arch Linux, busca ofrecer la potencia de Arch con una experiencia más amigable para el usuario.
  10. Alpine Linux: Una distribución ligera y segura, diseñada para mayor eficiencia y enfocada en la seguridad.

Instalación de Cron

En la mayoría de estas distribuciones, cron y crontab están preinstalados. Sin embargo, en algunas distribuciones minimalistas o específicas, es posible que necesites instalarlos manualmente. Aquí hay cómo hacerlo en algunas distribuciones populares:

En Debian, Ubuntu y derivadas:

sudo apt-get update
sudo apt-get install cron

En CentOS, RHEL y derivadas:

sudo yum update
sudo yum install cronie

En Fedora:

sudo dnf install cronie

En Arch Linux y derivadas:

sudo pacman -S cronie

Habilitar y Comprobar el Servicio de Cron

Después de instalar cron, asegúrate de que el servicio esté habilitado y funcionando:

sudo systemctl enable crond
sudo systemctl start crond
sudo systemctl status crond

Estos comandos aseguran que el servicio cron se inicie automáticamente en el arranque y verifican su estado actual.

Paso 1: Acceder al Crontab

Para empezar a editar tu crontab, abre un terminal y ejecuta el siguiente comando:

crontab -e

Si es la primera vez que lo usas, se te pedirá que elijas un editor de texto. Selecciona tu preferido (nano, vim, etc.).

Paso 2: Entender la Sintaxis del Crontab

Cada línea en un crontab sigue esta estructura:

* * * * * comando

Donde cada asterisco representa una unidad de tiempo:

  • Minutos (0-59)
  • Hora (0-23)
  • Día del mes (1-31)
  • Mes (1-12)
  • Día de la semana (0-7) (donde 0 y 7 representan el domingo)

Paso 3: Ejemplos de Configuraciones

Ejemplo 1: Ejecutar un script cada día a las 4:30 de la madrugada

Supongamos que tienes un script ubicado en /home/usuario/scripts/backup.sh que realiza una tarea de backup y quieres ejecutarlo todos los días a las 4:30 AM. Añade la siguiente línea a tu crontab:

30 2 * * * /home/usuario/scripts/backup.sh

Ejemplo 2: Borrar archivos temporales cada semana

Para limpiar los archivos temporales cada domingo a la medianoche:

0 0 * * 0 /usr/bin/find /tmp -type f -atime +7 -delete

Ejemplo 3: Sincronizar el reloj del sistema cada hora

Si deseas sincronizar el reloj del sistema cada hora:

0 * * * * /usr/sbin/ntpdate -s time.nist.gov

Ejemplo 4: Ejecutar múltiples tareas

Puedes tener múltiples tareas en tu fichero de crontab. Por ejemplo:

0 8 * * 1-5 /home/usuario/scripts/stats.sh  # Informe enviado a las 8:00 de la mañana entre semana
30 1 * * * /home/usuario/scripts/backup.sh  # Backup todos los días a la 1:30 de la madrugada

#TAREAS DE SERVIDOR
0 4 1 * * /home/usuario/scripts/maintenance.sh  # Mantenimiento mensual el primer día de cada mes a las 04:00

La almohadilla (#) se utiliza para realizar comentarios en el fichero que serán ignorados por el cron, así tanto una línea que comienza por almohadilla como a partir de donde se coloque, será ignorado.

Paso 4: Guardar y Salir

Una vez que hayas añadido tus tareas, guarda el archivo y cierra el editor. El daemon cron automáticamente recargará el crontab y ejecutará las tareas según lo programado.

Paso 5: Verificar el Crontab

Para verificar que tu crontab se ha guardado correctamente, puedes listar las tareas programadas con, se mostrará la configuración completa:

crontab -l

Consideraciones Adicionales

  • Logs de Cron: Los registros de las tareas cron generalmente se encuentran en /var/log/syslog o /var/log/cron. Revisa estos archivos de log para solucionar problemas si tus tareas no se ejecutan como esperas.
  • Permisos: Asegúrate de que los scripts que llamas desde el crontab tienen los permisos de ejecución correctos y están en la ruta que has definido.

Configurar el crontab en Linux es una tarea esencial para automatizar procesos y mantener la eficiencia del sistema. Siguiendo estos pasos, puedes programar tus tareas de manera efectiva y asegurarte de que se ejecuten puntualmente.


Espero que este pequeño tutorial te haya sido de utilidad. Si tienes alguna pregunta o comentario, no dudes en dejarlo abajo en los comentarios.

Logrotate, rotado automático de logs en Linux

Una de las tareas más importantes de un administrador de sistemas es la correcta gestión de los logs que se generan. Almacenar información que nos permita descubrir un error es importante, pero esa información no debe terminar por saturar nuestros sistemas.

Y una de las herramientas que nos van a permitir cumplir ese objetivo es logrotate, esta utilidad en linux nos permite rotar, comprimir y renovar los ficheros de log de forma automatizada. En este post voy a exponer algunos ejemplos que yo utilizo para este cometido, pero desde «man logrotate» tenéis información adicional para adaptar la configuración a vuestras necesidades.

El fichero principal de configuración está accesible por defecto en /etc/logrotate.conf

$ cat /etc/logrotate.conf
weekly
rotate 4
create
include /etc/logrotate.d
/var/log/mail {
    daily
    size 1M
    create 0664 root utmp
    rotate 1
}

El directorio /etc/logrotate.d/ contiene ficheros de configuración de otras aplicaciones instaladas en el sistema, como Apache (httpd) por ejemplo. Y allí podéis crear vuestro propio fichero para ejecutar la rotación de logs.

Así la configuración básica, incluye una ruta, seguida de llaves, donde se incluye la configuración que se quiere para el rotado de logs en esa ruta.

A través de las opciones daily, weekly, monthly, yearly se le indica cada cuanto tiempo se debe ejecutar el rotado. Así si elegimos weekly, una vez a la semana se hará el rotado del fichero indicado.

Rotar cuando se alcanza un determinado tamaño de fichero

/var/log/mail.log {
        size 1M
        rotate 4
}

Con la opción size se le indica a partir de que tamaño deber rotar, si el fichero no ha alcanzado el tamaño, en nuestro ejemplo 1 mega, el fichero no será rotado.

Entre las opciones más destacadas encontramos rotate, seguido de un número entero, le indica cuantos ficheros debemos conservar. Una vez alcanzado ese número se borrará el más antiguo.

Otra opción interesante es copytruncate, que realiza una copia del fichero original y luego vacia el fichero para que los procesos que estaban trabajando con ese fichero puedan seguir haciéndolo a pesar de la rotación.

Y la otra opción, que casi diría que es fija para la mayoría de administradores, es poder comprimir los logs una vez realizada la rotación para reducir espacio. Esta opción se indica con compress. Una última opción que puede ser de mucha utilidad es missingok, que evita retornar un error en caso de que se produzca.

Así una configuración básica que rotase todos los logs dentro del directorio /var/log/ cuando alcancen el mega de tamaño, manteniendo 5 rotados y comprimiendo los antiguos, quedaría así:

/var/log/*.log {
        size 1M
        copytruncate
        rotate 5
        compress
        missingok
}

Para ejecutar el comando manualmente haríamos lo siguiente:

logrotate -vf /etc/logrotate.conf

Mostrar colores en command line (Console – Symfony2)

Desde hace algún tiempo que utilizo el component Console de Symfony2 para crear mis propios comandos en las aplicaciones Symfony2 o en solitario para otros proyectos. Una de las ventajas, es su formato colorado en pantalla, que permite distinguir de un vistazo cuando ha fallado algo o si todo ha sido correcto.

Este coloreado resulta de aplicar unos estilos predeterminados (podemos generar los nuestros propios si lo necesitamos), pero para que esto funciones es necesario tener instalados algunos paquetes. En Linux haremos uso de php-process, mientras que en Mac debemos utilizar php-posfix.

Paquetes para probar PHP 7 en Fedora y RHEL

Para los que queráis ir probando las novedades que trae PHP 7 sin necesidad de compilar desde los fuentes, el repositorio de Remi ya tiene disponible el paquete php70 en remi-test, para sistemas RHEL y Fedora.

Si no tienes los repos de Remi, puedes descargarlos desde su página, seleccionando el sistema operativo que corresponda. Puedes hacer la instalación del repo manualmente o bajarte el paquete rpm de auto-configuración del repositorio.

El paquete está disponible para Fedora 20, 21, 22 y para Enterprise Linux 6 y 7 (RHEL, CentOs, …) como una instalación separada, por lo que puedes hacerla vivir fácilmente con otros paquetes de PHP que tengas ya instalados. Para realizar la instalación:

yum --enablerepo=remi,remi-test install php70 
[salva@localhost ~]# php70 -v
PHP 7.0.0-dev (cli) (built: Apr  3 2015 08:04:28) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 
1998-2015 Zend Technologies

La instalación se realiza bajo /opt/remi, sólo está disponible bajo arquitectura x86_64 y, por el momento, sólo instala la versión 7.0.0-dev. En el blog de Remi podéis encontrar más información.

Utilidades para trabajar con expresiones regulares

El otro día un compañero (gracias, Óscar) me envío un listado de URL’s con utilidades e información relacionada con expresiones regulares que siempre es útil tener a mano:

Yum: resolver el error «rpmdb open failed»

Tras intentar hacer alguna operación con yum en consola nos encontramos con el error «rpmdb open failed».

Este error indica que las bases de datos que se encuentran bajo el directorio /var/lib/rpm( están dañadas. Su formato de nombre de fichero es del tipo «_db*», así que para deshacernos de este problema nada más sencillo que borrarlas y volver a crearlas.

Como root ejecutamos el borrado de las bases de datos, las regeneramos, limpiamos la cache y la volvemos a crear.

$
$ rm -f /var/lib/rpm/_db*
$ rpm -vv --rebuilddb 
$ yum clean all
$ yum makecache 
$

Puesta a punto de Fedora 16

Es es un pequeño resumen de utilidades y configuraciones que deberíamos hacer para tener nuestro Fedora 16 a punto para poder sacarle en mejor rendimiento a este fantástico sistema operativo.

Plugins de yum

Una de las primeras cosas que debemos hacer es mejorar el rendimiento de YUM, puesto que lo necesitamos para el resto de tareas. Dos plugins fundamentales fastetstmirror (sirve para localizar el servidor más rápido para la descarga de paquetes) y presto que descarga sólo los paquetes nuevos de un determinado programa.

$
$ yum install yum-plugin-fastestmirror
$ yum install yum-presto
$

Instalar repositorios extras

Algunos paquetes interesantes, por uno u otro motivo, no se encuentran en los repositorios oficiales de Fedora, así que mejor tener preparados los repositorios extra para cuanto se necesiten.

$
$ yum localinstall --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
$

Instalar flash plugin en Fedora 16

El plugin de flash, una de esas cosa que una vez instalado no te volverás a preocupar, pero que cuando no lo tienes y accedes a una web que lo usa provoca bastante frustración.

yum install flash-plugin

Instalar java y su famoso plugin

Otra de esas cosas, que a menos que uses programas en java no echas de menos hasta que llegas a una web que requiere su famoso plugin para poder acceder a alguna utilidad. Si eres fan de la Fórmula 1 y quieres seguir la tabla de tiempos a través de la web oficial necesitas el plugin (OJO: algunos navegadores necesitan configuración adicional).

yum install java-1.6.0-openjdk
yum install java-1.6.0-openjdk-plugin

Instalar codecs de audio y video

Cuando intentes usar Rhythmbox para escuchar música te darás cuenta de su necesidad.

yum install gstreamer-plugins-bad gstreamer-plugins-bad-nonfree gstreamer-plugins-ugly gstreamer-ffmpeg

Visualización y herramientas

Completado el apartado de entrañas, toca una revisión a la parte visual. Fedora 16 viene con la Shell de Gnome 3 y tenemos una herramienta estupenda para configurar sus opciones gnome-tweak-tool

yum install gnome-tweak-tool

Algunas utilidades que en algún momento vais a necesitar si usáis Fedora como sistema de escritorio: paquete ofimático, editor de gráficos, gestor de documentos (si usas Google Docs, debes activar las cuentas en línea) y el VLC.

yum install libreoffice
yum install gimp gimp-data-extras gimp-fourier-plugin gimp-lqr-plugin gimp-resynthesizer gimpfx-foundry
yum install gnome-documents
yum install vlc-extras

Y eso es todo, excuso decir que para todas estas operaciones tenéis que tener permisos de administración sobre el sistema.