Ejecutar procesos periódicamente con cron
Típicamente el funcionamiento de un sitio Prontus requiere la ejecución periódica de algunos procesos, como la actualización de los índices del buscador Prontus, la actualización de portadas según la fecha de publicación o expiración de artículos, y otros. Para este propósito te sugerimos usar el comando cron.
Última modificación: Viernes 12 de abril de 2019
El software cron
es un comando estándar de Unix/Linux que te permite agendar la ejecución periódica de procesos, por ejemplo cada día, hora, minuto, semana o mes.
Cron se compone de crond
, un proceso automático o daemon
de sistema, que lee un archivo de configuración llamado crontab
que específica comando shell para ejecutarse periódicamente a una hora específica.
Cada línea de un archivo crontab representa un proceso a ejecutar con una cierta periodicidad, y está formada por una expresión CRON
, seguida por el comando shell a ejecutar.
Para agregar, quitar o modificar tareas, hay que editar el crontab. Esto se hace con la orden crontab -e, que abrirá el editor definido en la variable de entorno EDITOR y cargará el fichero crontab correspondiente al usuario que está logueado. Por ejemplo, si tu webserver tiene asignado el usuario www-data, una manera de editar el crontab correcto sería la siguiente:
miusuario $ su www-data
www-data $ crontab -e
El comando crontab -e
abrirá el editor de texto del sistema y te mostrará la estructura del archivo crontab para el usuario actual (en el ejemplo, www-data). La configuración de cron se actualizará al guardar y cerrar el archivo.
Puedes ver el contenido actual del crontab de un usuario con el comando crontab -l
.
Un archivo crontab normalmente tiene la siguiente estructura:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# formato de comandos
#.--------------- minuto (0-59) #| .------------ hora (0-23) #| | .--------- día del mes (1-31) #| | | .------ mes (1-12) o jan,feb,mar,apr,may,jun,jul... (meses en inglés) #| | | | .--- día de la semana (0-6) (domingo=0 ó 7) o sun,mon,tue,wed,thu,fri,sat (días en inglés) #| | | | | #* * * * * comando a ejecutar
01 * * * * perl /var/www/misitio.cl/cgi-cpn/prontus_cron_fechas.cgi miprontus
50 0 * * * perl /var/www/misitio.cl/cgi-cpn/prontus_indexer.cgi miprontus
Las primeras cuatro líneas permiten especificar, respectivamente
- SHELL: el shell a usar para ejecutar los comandos
- PATH: el path a usar para buscar comandos ejecutables si no especificas una ruta absoluta
- MAILTO: un email al que enviar la salida a pantalla emitida por los comandos ejecutados
- HOME: el directorio a usar como base al ejecutar los comandos
Luego de esas líneas debes ingresar los comandos a ejecutar en sí, con el formato como se describe en el código arriba: primero especificas cuándo debe correr cada proceso (por ejemplo al minuto 10 de la hora 05 de todos los días, o cada hora del día lunes de cada semana, y luego escribes el comando a ejecutar. Puedes especificar múltiples valores para los campos de minuto, hora, etc. separándolos con ,
, de este modo:
10,20 02,03 * * * miscript
indica un proceso que debe correr a las 02:10, 02:20, 03:10 y 03:20.
Puedes encontrar más detalles sobre el formato del archivo crontab en páginas como ésta.
Hay algunos procesos Prontus que normalmente querrás agregar al crontab:
prontus_indexer.cgi
: este proceso actualiza los índices del buscador Prontus cuando agregas, modificas o eliminas artículos. Normalmente puede correr dos veces al día, pero puedes aumentar o disminuir la frecuencia según las necesidades de tu sitio.prontus_cron_fechas.cgi
: esta CGI actualiza las portadas y portadas automáticas (taxonómicas, tags, etc) según la fecha de publicación y expiración que especifiques para tus artículos. Si un artículo tiene alta, pero fecha de publicación en el futuro, no se mostrará en las portadas en que lo incluyas hasta esa fecha. Si un artículo tiene alta y fecha de expiración especificada, no se mostrará en las portadas en que se encuentre luego de esa fecha. Este proceso depende de que esté activa la configuración CONTROL_FECHA en el archivo/[nombre del prontus]/cpan/[nombre del prontus]-var.cfg
. Este proceso normalmente corre una o dos veces al día.
Este es un ejemplo de un archivo crontab funcionante:
MAILTO=root
# m h dom mon dow command
# Indexacion de los buscadores
0 12,18 * * * /usr/bin/nice /usr/bin/perl /var/www/develop.prontus.cl/web/cgi-cpn/prontus_indexer.cgi prontus_desarrollo_v12_0
# cron fechas: el último parámetro es un listado de portadas separado por '/'
30 1 * * * /usr/bin/nice /usr/bin/perl /var/www/develop.prontus.cl/web/cgi-cpn/prontus_cron_fechas.cgi prontus_desarrollo_v12_0 inicio.html/noticias.html
Ese crontab especifica que debe indexarse el Prontus "prontus_desarrollo_v12_0" todos los días a las 12:00 y 18:00, y que debe ejecutarse el proceso de control de fechas para el mismo Prontus todos los días a la 01:30.
Puedes ver un listado de los procesos que actualmente se encuentran en el crontab para tu webserver en la página Administrar → Sistema → Listado de Crons en el panel de administración de Prontus.
Artículos Relacionados
Conceptos Básicos
¿Qué es Prontus?
Estructura de directorios
Glosario
Navegadores soportados
Tutoriales
Instalación de Prontus CMS
Implementar un nuevo sitio en Prontus
Cómo crear un FID
Cómo crear una plantilla de artículo
Cómo crear una plantilla de portada
Cómo crear plantillas de formulario
Cómo implementar un formulario
Cómo implementar un buscador
Cómo implementar un buscador Elasticsearch
Cómo crear una plantilla de taxonomía
Cómo crear plantillas de tags
Cómo crear una plantilla de listado
Cómo crear una plantilla de tags jerárquicos
Implementar carga de videos en Prontus
Integración de Redes Sociales
Instalación y Configuración
Requerimientos
Configuración del servidor
Base de datos
Asegurar la plataforma
Instalación con Wizard Prontus
Ajustes post-instalación
Archivos de configuración de Prontus
Friendly URLs
Friendly URLs para imágenes
SSI en Prontus
Logs de Eventos
Ejecutar procesos periódicamente con cron
Debugging
Plantillas
Plantillas de FID
Plantillas de artículo
Plantillas de portada
Plantillas de taxonomía
Plantillas de artículos relacionados
Plantillas de tags
Plantillas de listado
Plantillas de tags jerárquicos
Plantillas de mapa de taxonomía
Plantillas de mapa de tags
Marcas
Tipos de marcas
Diccionario de marcas
Marcas para texto
Marcas de lógica
Marcas de despliegue
Marca Menú y Panel
Parsing de marcas en formularios Prontus
Funcionalidades
Funcionalidades SEO en Prontus CMS
Multivistas
Galería de Imágenes
Buscador Multivista
Buscador
Buscador Elasticsearch
Calendarios
Imprimir artículos
Posting de contenidos
Plugins
Post-procesos
Prontus functions
Implementar copias de seguridad automáticas con Dropbox
Implementar múltiples ediciones
Regeneración masiva de artículos via línea de comandos