Don Quijote de la Mancha -Miguel de Cervantes-

 

cron, crontab y cron job, automatización de tareas CLI en Linux

3
(1)

Automatización de tareas CLI Linux con Cron, crontab y cron job

Crontab es una herramienta de programación en Linux que te permite automatizar tareas. Esto significa que puedes configurar tu sistema para ejecutar ciertos comandos a intervalos regulares sin necesidad de intervención manual. Es un método útil para realizar tareas repetitivas, tales como copias de seguridad, actualizaciones o mantenimiento del sistema.

Thank you for reading this post, don't forget to subscribe!

Diferencia entre Cron, Crontab y Cron Job

 

ElementoNombre en LinuxSignificado
Daemon‘crond’Son procesos del sistema del sistema  Linux.
Table‘crontab’Tabla en la que se introduce un comando crontab. Cada asterisco (*)
representa un segmento de tiempo y una acción o tarea.
JobCron JobTarea específica para realizar descrita en una fila, emparejada con su id de tiempo designado

La tabla Cron

Se trata de un archivo del sistema Linux que crea una estructura tipo tabla en la que los campos están separados por espacios en blanco. Los usuarios pueden rellenar la tabla asignando valores a cada campo (asterisco).

El Daemon Cron

Un proceso del sistema llamado Daemon se ejecuta en nuestro sistema

El daemon cron se llama ‘crond’. No se requiere ninguna acción por nuestra parte para ejecutar ese Daemon,para testear si se esta ejecutando:

$ ps aux | grep crond

Este comando buscará los procesos actuales de todos los usuarios y devolverá cualquier instancia de ‘crond’.

$ ps ux | grep crond

$ username 15032 0.0 0.0 72948 892 pts/1 S+ 19:09 0:00 grep crond

Sintaxis de Crontab

crontab [opciones]

* * * * *  <comando> 
OR 
* * * * * <path/del/script>

 

Crontab Explicacion

Como puedes ver, la sintaxis de crontab tiene 5 (*) asteriscos. Esto es lo que representa cada uno de esos asteriscos:

1 ^o^2 ^o^3 ^o^4 ^o^5 ^o^
*****
IDMinutoHoraDíaMesNombre
del día
Valores0-590 -231-311-120-6
📋
Los nombres de los días 0-6 empiezan por domingo.

Para programar una tarea, sustituye el asterisco correspondiente por el valor deseado.

Un crontab como el siguiente:

0 0 * * 0 

Ejecuta el ‘commando’ a las 00:00 [medianoche] todos los domingos.

Configurar crontab para acceso a tu cuenta de usuario

Crontab es específico para cada usuario.

$ crontab -l
no crontab for username
$ crontab -e
no crontab for username - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/code

Choose 1-2 [1]: 1

Al ejecutar este comando, se puede ver que no existe ningún crontab en el sistema.

Como aún no he creado un crontab, cuando uso -e para editar la tabla, me pide mi editor de texto preferido.

Si no tienes éxito, utiliza sudo

Si intentas el comando crontab -e pero no obtiene este resultado, es posible que no tenga los privilegios de usuario para crear la tabla. Si tienes acceso sudo, puedes usar este para establecer el crontab.

$ sudo crontab -e <nombre_del_usuario>

Tu sistema cargará automáticamente su crontab en el destino adecuado, que puede variar en función de la distribución, pero suele estar en un directorio como /var/spool/cron/crontabs. No intentes editar los archivos aquí.

¿Qué sucede si la tarea cron encuentra un error?

El comportamiento predeterminado es enviar la salida por correo electrónico. Esta función está diseñada para los administradores que pueden enviar automáticamente los registros a un correo electrónico «local» en el dominio de la red.

Puedes configurar esto tú mismo si tienes un servidor de correo. También hay maneras de automatizar la salida de correo electrónico a Gmail o servicios similares. Sin embargo, estos métodos están fuera del alcance de este artículo.

En su lugar, veremos dos formas comunes de evitar el error.

Enviar la salida a un archivo

Puedes designar un archivo para que este tipo de salida sea enviada y luego usar >> para redirigir la salida.

El uso de >> añadirá información a un archivo existente, mientras que un solo símbolo > sobrescribirá el archivo. Esto es importante saberlo si quieres mantener un archivo de registro grande que actualice los registros con frecuencia. Ambos crearán automáticamente el archivo si no existe.

Ejemplo de Cron Job:

0 * * * *  echo "Linux is Cool!" >> ~/crontab_log.txt

Utiliza/dev/null

Esto evitará la opción de correo electrónico, ya que esencialmente elimina los datos. El error estándar (‘2’) y la salida estándar (‘1’) se envían al archivo nulo.

0 0 * * * echo "¿Por qué me silencias cada noche a medianoche?" > /dev/null 2>&1

Ejemplos de Crontab: programación de comandos y scripts

Ejemplo:

MinutoHoraDíaMesNombre
del día
Comando
0****echo “Linux is Cool!” >> ~/crontab_log.txt

Si el valor de los minutos es «0», el comando se ejecutará cada hora, a la hora en punto.

Programación avanzada de trabajos

Puedes editar varios valores a la vez. Si lo desea, puedes sustituir los 5 asteriscos por especificaciones.

MinutoHoraDíaMesNombre
del día
Comando
*/53-6*/5*/20,6echo “Linux is Cool!” >> ~/crontab_log.txt

Aquí vemos:

CampoValorSignificado
Day Name0,6Sábados y domingos
Month*/2Cada mes que sea divisible por 2 meses (pares).
Day Date*Cada fecha
Hour3-6Entre 3 y6 AM
Minutes*/5Cada 5 minutos

 

Cada dos meses, los fines de semana, independientemente de la fecha, este comando se ejecutará cada 5 minutos entre las 3 am y las 6 am.

Script de automatización cron para hacer copias de seguridad de archivos

No se limita a bash, también puedes implementar un script que use Python o Perl si se quiere.

Objetivos:

  • Los trabajos serán procesados a las 3 AM cada noche
  • Hacer una copia de seguridad de la carpeta /Documentos en un archivo zip
  • Generar un archivo de texto con una lista de todo lo que hay en el directorio
  • Crear una carpeta de archivo que clone nuestra copia de seguridad y el archivo de texto en una subcarpeta con la fecha actual

nuestro_backup_script.sh

#! /bin/bash

FECHA=$(date +%d-%m-%Y)
# Fecha en formato DÍA##-MESO##-AÑO####

mkdir -p ~/archivo/$FECHA
# crear una carpeta para la fecha de hoy en el archivo, si el archivo no existe, hacer archivo 
ls -al ~/Documentos > ~/archivo/$FECHA/contenido.txt
# crear un archivo de texto con el contenido de la carpeta de documentos
cd ~/ && tar -cpzf $FECHA.docs.backup.gz Documentos/*
# cambiar al directorio padre a la carpeta tar /Documentos
cp ~/$FECHA.docs.backup.gz ~/archivo/$FECHA/documents_archivo.gz
# se deja un archivo .gz en el directorio padre, se envía un clon a nuestro archivo bajo su fecha
$ ls
 Desktop     Descargas   Music                      Pictures   Public      Videos
 Documentos  ENV         nuestro_backup_script.sh   projects   Templates  'VirtualBox VMs'
$ bash nuestro_backup_script.sh 
$ ls
 DD-MM-YYYY.docs.backup.gz   Documentos  Music                      projects    Videos
 archivo                     Descargas   nuestro_backup_script.sh   Public     'VirtualBox VMs'
 Desktop                     ENV         Pictures               Templates
$ ls archivo/25-11-2019/
contents.all_files.txt  documents_archivo.gz

Todo lo que queda por hacer es convertir este script en una tarea cron.

$crontab -e

Y añade lo siguiente:

0 3 * * * bash ~/nuestro_backup_script.sh

Funciono?


 

How useful was this post?

Click on a star to rate it!

Average rating 3 / 5. Vote count: 1

No votes so far! Be the first to rate this post.

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

0 - 0

Thank You For Your Vote!

Sorry You have Already Voted!

Leave a Reply

Your email address will not be published. Required fields are marked *

error

Enjoy this blog? Please spread the word :)