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 abre­via­tu­ra también hace re­fe­re­n­cia a Cronos, el dios griego del tiempo. En sistemas ope­ra­ti­vos como Linux o macOS, el comando se lleva a cabo en forma de “cron daemon” (también de­no­mi­na­do “cron system”).

La alusión al dios griego del tiempo es una regla mne­mo­té­c­ni­ca 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 au­to­ma­ti­za­das (“jobs”) en momentos pre­via­me­n­te definidos. Por lo tanto, si se combina el término “cron system” con el de la tarea pree­s­ta­ble­ci­da, se obtiene “cronjob”.

En este artículo de­s­ve­la­mos cómo funciona esta te­c­no­lo­gía y qué hay exac­ta­me­n­te detrás de las tareas au­to­ma­ti­za­das y re­cu­rre­n­tes 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 au­to­ma­ti­za­da en los sistemas ope­ra­ti­vos. Para la ejecución de este trabajo, el sistema emite órdenes de manera regular. Puede tratarse de una sola tarea, pero no­r­ma­l­me­n­te se trata de varias tareas complejas, es decir, de varios cronjobs. La gran ventaja es que los cronjobs presentan un gran potencial de in­di­vi­dua­li­za­ción.

Cada cronjob está compuesto por tres co­m­po­ne­n­tes:

  • El script que se debe llevar a cabo
  • El comando que el script ejecuta con re­gu­la­ri­dad
  • La acción o tarea del script

Un ejemplo práctico de su uso son las tareas re­cu­rre­n­tes de los se­r­vi­do­res: por medio de cronjobs se ponen en marcha de manera au­to­má­ti­ca, entre otras tareas, el envío de ne­w­s­le­t­te­rs, la obtención de es­ta­dí­s­ti­cas o la limpieza de bases de datos.

Todos los sistemas ope­ra­ti­vos que cuentan con un cron system (o cron daemon) pueden utilizar cronjobs. Entre ellos se cuentan todos los sistemas Unix y BSD (Berkeley Software Di­s­tri­bu­tion), como macOS o Linux.

Los sistemas ope­ra­ti­vos pueden ejecutar los cronjobs en in­te­r­va­los pre­de­fi­ni­dos, tal y como lo establece su lema “Command run on notice” (ejecución de órdenes previo aviso). Las tareas ru­ti­na­rias pueden eje­cu­tar­se de manera to­ta­l­me­n­te autónoma. Además de un sistema operativo con cron daemon, hay que disponer de los si­guie­n­tes re­qui­si­tos para poder co­n­fi­gu­rar cronjobs:

Nota

Existen in­te­r­fa­ces de usuario es­pe­cia­les para la co­n­fi­gu­ra­ción sencilla de cronjobs y paquetes de alo­ja­mie­n­to web que incluyen cronjobs pre­co­n­fi­gu­ra­dos para proyectos web. Si te interesa el alo­ja­mie­n­to web con cronjobs, te re­co­me­n­da­mos nuestro artículo de ayuda sobre tareas cron.

¿Qué tareas llevan a cabo los cronjobs?

El área de uti­li­za­ció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 pro­ce­sa­mie­n­to de es­ta­dí­s­ti­cas de visitas a páginas web se en­cue­n­tran entre las típicas áreas de uti­li­za­ción de los cronjobs.

En co­m­bi­na­ción con un sistema de gestión de co­n­te­ni­dos, los cronjobs pueden enviar ne­w­s­le­t­te­rs o comprobar las exi­s­te­n­cias de tiendas online au­to­má­ti­ca­me­n­te. Su­pe­r­vi­san las tasas de ocupación de los se­r­vi­do­res y pueden adaptar, de manera au­to­má­ti­ca, nuevos datos en la de­s­cri­p­ción de productos como, por ejemplo, la va­lo­ra­ción media de los usuarios.

Nota

Las tareas au­to­ma­ti­za­das de cronjobs son tan ve­r­sá­ti­les que se deben im­ple­me­n­tar con prudencia, puesto que requieren una gran cantidad de recursos. Por ello, con cada cronjob se deberá sopesar si realmente es co­n­ve­nie­n­te 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 in­te­r­fie­ran con otros procesos.

Las tareas más im­po­r­ta­n­tes:

  • Limpieza de bases de datos: se eliminan los conjuntos de datos obsoletos, incluidos los co­me­n­ta­rios y las entradas de acceso que ya no son actuales.
  • Ge­ne­ra­ción de es­ta­dí­s­ti­cas: una de las tareas de los cronjobs puede ser, por ejemplo, ac­tua­li­zar dia­ria­me­n­te la carga de un sitio web.
  • Ac­tua­li­za­ción de listas de di­s­tri­bu­ción RSS: mediante un cronjob puede generarse re­gu­la­r­me­n­te el archivo XML una y otra vez.
  • Pla­ni­fi­ca­ción y pu­bli­ca­ción de nuevos co­n­te­ni­dos
  • Envío de ne­w­s­le­t­te­rs: los correos ele­c­tró­ni­cos se envían durante un periodo de­te­r­mi­na­do de tiempo.
  • Ge­ne­ra­ción de facturas: las facturas se pueden generar y enviar de manera au­to­má­ti­ca, agrupadas y en in­te­r­va­los regulares de tiempo.
  • Copia de seguridad de bases de datos: sobre todo, de pequeñas bases de datos que no superen los 20 MB.
  • Apre­n­di­za­je au­to­ma­ti­za­do: a través de los cronjobs es posible su­mi­ni­s­trar nuevos conjuntos de datos a in­te­li­ge­n­cias ar­ti­fi­cia­les en in­te­r­va­los regulares.
  • Ac­tua­li­za­cio­nes: mediante cronjobs se puede de­te­r­mi­nar el momento en el que se deben llevar a cabo las ac­tua­li­za­cio­nes de software.

¿Qué es­tru­c­tu­ra tiene un comando estándar de cronjob?

Las po­si­bi­li­da­des de in­di­vi­dua­li­za­ción son la gran ventaja de los cronjobs. Para pe­r­so­na­li­zar­los, se puede partir pri­n­ci­pa­l­me­n­te de tres variables eje­cu­ta­bles en cualquier momento:

  1. PATH: muestra la ruta en la que se buscan las órdenes o los scripts.
  2. SHELL: dirige el in­té­r­pre­te de comandos para ejecutar un script.
  3. MAILTO: muestra el usuario con el que se deben compartir los re­su­l­ta­dos del cronjob, que ge­ne­ra­l­me­n­te es un su­s­cri­p­tor.

Los usuarios pueden definir los cronjobs por medio de estas tres variables, así como de muchas otras. Ge­ne­ra­l­me­n­te se utilizan los scripts SHELL, PHP y PERL para las órdenes.

Nota

En nuestro artículo sobre comandos en Linux puedes obtener más in­fo­r­ma­ció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 ade­la­n­ta­do. El cron daemon trabaja entonces en segundo plano y lleva a cabo tareas no in­ter­ac­ti­vas. En el entorno de Windows, esta función se conoce como “servicios”.

Los cronjobs se en­cue­n­tran ge­ne­ra­l­me­n­te 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 es­pe­cí­fi­co.

Los cronjobs se definen y co­n­fi­gu­ran en una tabla que también se denomina “crontab”. En ella se enumera la hora y la secuencia de órdenes que se deben ejecutar.

Nota

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 di­re­c­to­rio de crontab “/etc/cron.*/”.

Web Hosting
El hosting que crece con tu proyecto
  • Tiempo de actividad de 99.99 % y seguridad ga­ra­n­ti­za­da
  • Aumenta el re­n­di­mie­n­to según el tráfico de tu página web
  • Incluye dominio, SSL, e-mail y soporte 24/7

Cuatro breves ejemplos de cronjobs

Con el programa crontab se pueden editar crontabs. El comando necesario para ello es:

crontab -e

Su sintaxis es re­la­ti­va­me­n­te 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 co­rre­s­po­n­die­n­te. 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 in­fo­r­ma­ción sobre periodos de tiempo exactos.

Para incluir in­fo­r­ma­ción más concreta, es necesario sustituir los as­te­ri­s­cos 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 co­m­bi­na­bles. En total, existen tres valores te­m­po­ra­les para las primeras cinco po­si­cio­nes:

  • *= ejecución siempre (con cada in­di­ca­ció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 re­pro­du­cir un sonido en in­te­r­va­los regulares:

*/30 * * * * /usr/bin/play_sound.sh

Ejemplo 3: correos ele­c­tró­ni­cos de re­co­r­da­to­rio

El siguiente cronjob envía correos ele­c­tró­ni­cos a las 8 y a las 18 h:

0 8,18 * * * /usr/bin/send_reminder_mail.sh

Ejemplo 4: Gracias, Admin

Otra po­si­bi­li­dad es usar el cronjob para que nadie olvide nunca más el día del ad­mi­ni­s­tra­dor:

0 0 30 07 * (echo "Gracias a todos los Systemadmins" | mail -s "Before you speak, remember I have admin rights." user@domain.xy)
Ir al menú principal