Cronjob: ejecución automática de tareas cron
La primera respuesta a la pregunta “¿Qué es un cronjob?” es un “daemon”. La segunda respuesta es “un dios”, al menos si nos referimos solo al origen de su nombre. En el sentido más estricto, “cron” significa “command run on notice”, es decir, “comando que se ejecuta previo aviso”. No obstante, la abreviatura también hace referencia a Cronos, el dios griego del tiempo. En sistemas operativos como Linux o macOS, el comando se lleva a cabo en forma de “cron daemon” (también denominado “cron system”).
La alusión al dios griego del tiempo es una regla mnemotécnica perfecta para recordar el sentido y la finalidad de un cronjob. El cron system funciona en el segundo plano de un sistema operativo y puede ejecutar tareas automatizadas (“jobs”) en momentos previamente definidos. Por lo tanto, si se combina el término “cron system” con el de la tarea preestablecida, se obtiene “cronjob”.
En este artículo desvelamos cómo funciona esta tecnología y qué hay exactamente detrás de las tareas automatizadas y recurrentes que se llevan a cabo usando los recursos de la manera más eficiente posible.
¿Qué es un cronjob?
Un cronjob es una tarea que se ejecuta de manera automatizada en los sistemas operativos. Para la ejecución de este trabajo, el sistema emite órdenes de manera regular. Puede tratarse de una sola tarea, pero normalmente se trata de varias tareas complejas, es decir, de varios cronjobs. La gran ventaja es que los cronjobs presentan un gran potencial de individualización.
Cada cronjob está compuesto por tres componentes:
- El script que se debe llevar a cabo
- El comando que el script ejecuta con regularidad
- La acción o tarea del script
Un ejemplo práctico de su uso son las tareas recurrentes de los servidores: por medio de cronjobs se ponen en marcha de manera automática, entre otras tareas, el envío de newsletters, la obtención de estadísticas o la limpieza de bases de datos.
Todos los sistemas operativos que cuentan con un cron system (o cron daemon) pueden utilizar cronjobs. Entre ellos se cuentan todos los sistemas Unix y BSD (Berkeley Software Distribution), como macOS o Linux.
Los sistemas operativos pueden ejecutar los cronjobs en intervalos predefinidos, tal y como lo establece su lema “Command run on notice” (ejecución de órdenes previo aviso). Las tareas rutinarias pueden ejecutarse de manera totalmente autónoma. Además de un sistema operativo con cron daemon, hay que disponer de los siguientes requisitos para poder configurar cronjobs:
- Un servidor dedicado
- Un secure shell (SSH) o un cliente Telnet para el acceso
- Un cliente FTP para la transferencia de archivos o carga de archivos cron
Existen interfaces de usuario especiales para la configuración sencilla de cronjobs y paquetes de alojamiento web que incluyen cronjobs preconfigurados para proyectos web. Si te interesa el alojamiento web con cronjobs, te recomendamos nuestro artículo de ayuda sobre tareas cron.
¿Qué tareas llevan a cabo los cronjobs?
El área de utilización más habitual de los cronjobs son las copias de seguridad. Si, por ejemplo, deseas realizar copias de seguridad con el comando tar de manera regular para archivar datos, los cronjobs son perfectos para ello. También la limpieza de bases de datos y el procesamiento de estadísticas de visitas a páginas web se encuentran entre las típicas áreas de utilización de los cronjobs.
En combinación con un sistema de gestión de contenidos, los cronjobs pueden enviar newsletters o comprobar las existencias de tiendas online automáticamente. Supervisan las tasas de ocupación de los servidores y pueden adaptar, de manera automática, nuevos datos en la descripción de productos como, por ejemplo, la valoración media de los usuarios.
Las tareas automatizadas de cronjobs son tan versátiles que se deben implementar con prudencia, puesto que requieren una gran cantidad de recursos. Por ello, con cada cronjob se deberá sopesar si realmente es conveniente y, sobre todo, en qué momento se debe llevar a cabo. Existen scripts PHP que se encargan de que los cronjobs solo se ejecuten cuando no interfieran con otros procesos.
Las tareas más importantes:
- Limpieza de bases de datos: se eliminan los conjuntos de datos obsoletos, incluidos los comentarios y las entradas de acceso que ya no son actuales.
- Generación de estadísticas: una de las tareas de los cronjobs puede ser, por ejemplo, actualizar diariamente la carga de un sitio web.
- Actualización de listas de distribución RSS: mediante un cronjob puede generarse regularmente el archivo XML una y otra vez.
- Planificación y publicación de nuevos contenidos
- Envío de newsletters: los correos electrónicos se envían durante un periodo determinado de tiempo.
- Generación de facturas: las facturas se pueden generar y enviar de manera automática, agrupadas y en intervalos regulares de tiempo.
- Copia de seguridad de bases de datos: sobre todo, de pequeñas bases de datos que no superen los 20 MB.
- Aprendizaje automatizado: a través de los cronjobs es posible suministrar nuevos conjuntos de datos a inteligencias artificiales en intervalos regulares.
- Actualizaciones: mediante cronjobs se puede determinar el momento en el que se deben llevar a cabo las actualizaciones de software.
¿Qué estructura tiene un comando estándar de cronjob?
Las posibilidades de individualización son la gran ventaja de los cronjobs. Para personalizarlos, se puede partir principalmente de tres variables ejecutables en cualquier momento:
- PATH: muestra la ruta en la que se buscan las órdenes o los scripts.
- SHELL: dirige el intérprete de comandos para ejecutar un script.
- MAILTO: muestra el usuario con el que se deben compartir los resultados del cronjob, que generalmente es un suscriptor.
Los usuarios pueden definir los cronjobs por medio de estas tres variables, así como de muchas otras. Generalmente se utilizan los scripts SHELL, PHP y PERL para las órdenes.
En nuestro artículo sobre comandos en Linux puedes obtener más información básica sobre comandos en Linux y sistemas similares.
¿Cómo funciona un cronjob?
Para que un cronjob pueda realizar su trabajo, es necesario dar un comando por adelantado. El cron daemon trabaja entonces en segundo plano y lleva a cabo tareas no interactivas. En el entorno de Windows, esta función se conoce como “servicios”.
Los cronjobs se encuentran generalmente en estado de reposo y esperan a su comando: ya sea por medio del sistema operativo o desde otro ordenador de la red. El comando se ejecuta mediante un archivo cron (un archivo de texto sencillo), que establece la tarea para un momento específico.
Los cronjobs se definen y configuran en una tabla que también se denomina “crontab”. En ella se enumera la hora y la secuencia de órdenes que se deben ejecutar.
También el programa con el que se editan cada una de las crontabs se denomina “crontab”.
El archivo crontab de sistema estándar “crontab” se encuentra en el directorio de crontab “/etc/cron.*/”.
- Rápido, seguro, flexible y escalable
- Certificado SSL/DDoS incluido
- Dominio y asesor personal incluidos
![](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/IAS/CTAs/SEO_Digital_Guide_Mobile_nur-Nlement_900x750.png)
Cuatro breves ejemplos de cronjobs
Con el programa crontab se pueden editar crontabs. El comando necesario para ello es:
crontab -e
Su sintaxis es relativamente clara. De esta forma, cada cronjob presenta el siguiente formato:
* * * * * comando que se debe ejecutar
- - - - -
| | | | |
| | | | +----- día de la semana (0 - 7) (domingo es 0 y 7)
| | | +------- mes (1 - 12)
| | +--------- día (1 - 31)
| +----------- hora (0 - 23)
+------------- minuto (0 - 59)
El asterisco “*” significa en este caso que un cronjob siempre se debe llevar a cabo en el día, mes, hora o minuto correspondiente. Para los días de la semana y los meses se pueden utilizar las tres primeras letras de los nombres en inglés: por ejemplo, “sun” para el domingo. Con este tipo de notación no es posible incluir información sobre periodos de tiempo exactos.
Para incluir información más concreta, es necesario sustituir los asteriscos por cifras. Si en la primera posición se indica “8-10”, el comando se ejecutará en los minutos 8, 9 y 10. Si, por el contrario, se indica “*/2”, el comando se ejecutará cada dos minutos. Estas dos opciones son combinables. En total, existen tres valores temporales para las primeras cinco posiciones:
- *= ejecución siempre (con cada indicación)
- */n = ejecución cada n
- n,x,y = ejecución a las/el n,x,y
Ejemplo 1: ejecutar un cronjob como copia de seguridad
Para que todas las mañanas se ejecute una copia de seguridad a las 6 h, se necesita el siguiente comando:
0 6 * * * /usr/bin/backup.sh
Ejemplo 2: un sonido cada 30 minutos
Los cronjobs también se pueden utilizar para reproducir un sonido en intervalos regulares:
*/30 * * * * /usr/bin/play_sound.sh
Ejemplo 3: correos electrónicos de recordatorio
El siguiente cronjob envía correos electrónicos a las 8 y a las 18 h:
0 8,18 * * * /usr/bin/send_reminder_mail.sh
Ejemplo 4: Gracias, Admin
Otra posibilidad es usar el cronjob para que nadie olvide nunca más el día del administrador:
0 0 30 07 * (echo "Gracias a todos los Systemadmins" | mail -s "Before you speak, remember I have admin rights." user@domain.xy)