Nota:

Uso de la utilidad Crontab para programar tareas en Oracle Linux

Antes de empezar

En este tutorial se muestra cómo utilizar el comando crontab en Oracle Linux. Este tutorial está dirigido a usuarios de Oracle Linux 8, pero los comandos también están disponibles en otras versiones de Oracle Linux.

Antecedentes

Oracle Linux puede ejecutar programas automáticamente como tareas o trabajos programados. Puede programar programas para que se ejecuten como tareas de nivel de sistema editando la configuración cron en /etc/cron*; o puede programar programas para que se ejecuten como trabajos dentro de crontab de usuario. Si no tiene acceso de administrador del sistema en un sistema o los programas que desea programar son específicos de su cuenta de usuario, la utilidad crontab proporciona un buen mecanismo para ejecutar programas con un programa regular bajo sus propias credenciales de usuario. crontab permite programar trabajos para que se ejecuten tan a menudo como cada minuto o tan poco frecuente como una vez al año; sin embargo, debe tener en cuenta que el trabajo cron no se ejecutará si el sistema está inactivo durante el tiempo en que se programó la ejecución del trabajo.

Este tutorial está dirigido a usuarios de Oracle Linux 8, pero crontab también está disponible para Oracle Linux 7 y el contenido de este tutorial se debe aplicar igualmente en esa plataforma. Tenga en cuenta que la configuración cron es estándar en la mayoría de los sistemas Linux y está disponible para sistemas similares a Unix desde 1975. Se incluyen soluciones de programación más complejas en Systemd en forma de temporizadores y se anima a los usuarios a explorar los temporizadores Systemd con más profundidad para resolver requisitos específicos. Sin embargo, este tutorial proporciona formación básica más adecuada para el usuario medio.

¿Qué se necesita?

Objetivos

En este tutorial aprenderá a:

Mostrar el contenido del archivo crontab

Nota: al utilizar el entorno de prácticas gratuitas, consulte Aspectos básicos del laboratorio de Oracle Linux para conocer la conexión y otras instrucciones de uso.

Utilice el comando crontab -l para mostrar el contenido del archivo crontab.

crontab -l

Si no existe ninguna entrada crontab para el usuario, se muestra el siguiente mensaje:

no crontab for oracle

Crear o editar crontab

  1. Utilice el comando crontab –e para abrir crontab en el editor predeterminado:

    crontab -e
    

    El editor predeterminado en Oracle Linux 8 es el editor vim.

  2. Agregue la siguiente línea al final del archivo para crear un trabajo crontab que ejecute el comando echo cada minuto:

    * * * * * echo "Hello World"
    

    En vim:

    • Puede saltar a la parte inferior del archivo pulsando 'Shift-g'.
    • Pulse la tecla 'i' para acceder al modo de inserción.
    • Introduzca la línea crontab.
    • Pulse la tecla Esc para salir del modo de inserción.
    • Introduzca ':wq' para escribir el archivo y en el editor.

    Este paso instala crontab y lo activa inmediatamente:

    crontab: installing new crontab
    
  3. Muestre las entradas de crontab para mostrar la nueva entrada:

    crontab -l
    

Cada trabajo aparece en su propia línea en crontab. El crontab tiene 5 campos separados por espacios que definen los diferentes períodos de tiempo que se pueden configurar, seguido del comando que se ejecuta para el trabajo. El comando puede ser equivalente a cualquier comando que pueda ejecutar en la línea de comandos del sistema, lo que le permite ejecutar sus propias secuencias de comandos o aprovechar los operadores de canalización y redirección.

Compruebe la salida de la entrada cron

Por defecto, no hay ningún agente de transporte de correo (MTA) instalado en un sistema Oracle Linux mínimo o en una imagen de plataforma de Oracle Linux. Cuando no se encuentra MTA, el daemon cron dirige la salida de los comandos especificados en crontab al daemon Syslog. En una nueva instalación de Oracle Linux 8, puede ver la salida crontab en el archivo log en /var/log/cron.

Ejecute el siguiente comando para ver la salida generada por la nueva entrada crontab:

sudo tail /var/log/cron

Tenga en cuenta que la tarea cron solo se ejecuta cada minuto, por lo que puede que necesite esperar un minuto antes de ejecutar el comando. La salida de esta entrada cron debe ser similar a:

Jun 30 12:39:02 ol8-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol8-server CROND[68551]: (oracle) CMDOUT (Hello World)

Esta salida muestra el usuario como el que se ejecuta el comando, el comando que se ejecutó y, a continuación, muestra la salida del comando.

Si se instala un MTA, como postfix o sendmail, cron dirige la salida de la entrada crontab a la cola de correo para el usuario en el que se ejecuta la entrada crontab. Esto se explica más adelante en este tutorial.

Opciones de secuencia de tiempo de Crontab

Los campos de hora de crontab se definen en la siguiente secuencia:

Se pueden utilizar caracteres especiales en cualquiera de los campos de hora:

El crontab también le permite usar una extensión abreviada especial para reemplazar los campos de tiempo para requisitos de tiempo generales. Es importante que esta abreviatura también incluya una opción para ejecutar un comando después del reinicio:

Tenga en cuenta que crontab solo proporciona granularidad de 1 minuto. No es sencillo definir una entrada crontab que se ejecute con más frecuencia que cada minuto. Si está buscando una herramienta que pueda manejar esto, considere la posibilidad de buscar unidades de temporizador Systemd.

Edite crontab para probar diferentes comandos en ejecución en diferentes secuencias de tiempo

  1. Utilice el comando crontab –e para abrir crontab en el editor predeterminado:

    crontab -e
    
  2. Agregue las siguientes entradas al crontab:

    */15 * * * * echo "This crontab entry runs every 15 minutes"
    10 * * * * echo "This crontab entry runs at 10 minutes past every hour"
    30 13 * * 3 echo "This crontab entry runs at 13h30 on every Wednesday"
    @reboot echo "This command runs once after a reboot event"
    
  3. Guardar el archivo crontab y salir.

Sintaxis del comando Crontab

El comando crontab se ejecuta con las credenciales del usuario al que pertenece crontab y se ejecuta con algunas variables de entorno predeterminadas definidas, incluidas:

Puede definir variables de entorno alternativas especificándolas como líneas dentro de crontab que no incluyen campos de tiempo, por ejemplo, si prefiere utilizar el shell bash y desea importar regularmente todas las variables y configuraciones con su configuración personal .bashrc, puede editar crontab para que tenga el siguiente aspecto:

SHELL=/bin/bash
* * * * * source $HOME/.bashrc;

Dado que la ejecución del comando para un trabajo crontab se ejecuta dentro de un entorno de shell, se aplica la sintaxis de shell estándar y se puede utilizar para canalizar o redirigir la salida. Por ejemplo, para redirigir toda la salida a /dev/null, desactivando cualquier salida de correo para el trabajo como resultado, utilice redirecciones de shell estándar para la salida de STDOUT y STDERR en el comando:

* * * * * /path/to/command > /dev/null 2>&1

También puede redirigir la salida para agregarla a un archivo que podría utilizar para realizar un seguimiento de la salida del comando cada vez que se ejecuta:

* * * * * /path/to/command >> $HOME/command.log

Edite crontab para experimentar con la sintaxis del comando

  1. Abra crontab en un editor con el comando crontab -e.

  2. Agregue las siguientes entradas:

    */15 * * * * echo "This 'silent' crontab entry runs every 15 minutes but output is redirected to /dev/null" > /dev/null 2>&1
    * * * * * echo "The date and time is $(date +\%Y-\%m-\%d\ \%H:\%M:\%S)" >> $HOME/crontab.log
    

    Tenga en cuenta que el % de caracteres del comando date se identifica porque la utilidad crontab cambia % de caracteres a caracteres newline y todos los datos después del primer % se envían al comando como entrada estándar. Consulte man 5 crontab para obtener más información.

  3. Guardar el archivo y salir.

En un minuto, debe aparecer un archivo crontab.log en el directorio $HOME. Puede ver el contenido de este archivo ejecutando:

tail $HOME/crontab.log

Acceder a la salida crontab en la cola de correo local

Si se instala un MTA, toda la salida de crontab se envía por correo a la cola de correo del sistema del usuario, de manera predeterminada.

Nota: Las siguientes instrucciones son solo para fines de ejemplo y no describen una configuración completa para un agente de transferencia de correo (MTA). Es posible que los valores por defecto de configuración no sean adecuados para la instalación. Si está activando el postfijo en un sistema, lea también Oracle Linux: instalación del servidor de correo electrónico de Postfix para obtener información sobre cómo configurarlo correctamente.

Para que la gestión de correo crontab funcione correctamente, debe instalar, configurar y activar un MTA correctamente. Para este ejercicio, simplemente puede realizar los siguientes pasos para permitir que el MTA postfix gestione el correo local:

  1. Instale el paquete postfix:

    sudo dnf install -y postfix
    
  2. Active e inicie el servicio postfix. La configuración por defecto activa el postfijo solo como MTA de entrega local:

    sudo systemctl enable --now postfix.service
    
  3. Reinicie el servicio crond, de modo que empiece a utilizar el postfijo MTA para manejar la entrega de correo:

    sudo systemctl restart crond.service
    

Si no ha configurado crontab para redirigir la salida a una dirección de correo alternativa o para desechar la salida de los trabajos cron, la salida de cada trabajo se entrega automáticamente en la cola de correo local para el usuario. La cola de correo suele almacenarse como un único archivo de correo al que se puede acceder en /var/spool/mail/$USER. Si simplemente está supervisando la actividad reciente, es más fácil adaptar este archivo para ver el correo como se entrega:

tail -f /var/spool/mail/$USER

Para revisar la salida de cada trabajo cron en una interfaz gestionable, instale el paquete mailx y utilice el comando mail para ver el contenido de la cola de correo:

sudo dnf install -y mailx
mail

El correo se muestra de la siguiente manera:

Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/oracle": 1 messages 1 new
>N  1 (Cron Daemon)         Wed Aug  5 23:48  30/1436  "Cron oracle
&

Introduzca el número del mensaje de correo que desea ver. Por ejemplo, introduzca 1 para ver el primer mensaje en la cola:

& 1
Hello World

Utilice el comando header para volver a la lista de cabeceras de correo o utilice el comando quit para salir de la aplicación.

Puede cambiar la dirección de correo electrónico que se utiliza para enviar la salida cron definiendo la variable de entorno MAILTO en crontab, pero el sistema debe estar configurado para gestionar la entrega de correo externo. Si define el entorno MAILTO en un valor vacío, se descarta la salida y no se envía correo para ningún trabajo cron en crontab.

Eliminar la crontab completa

Utilice el comando crontab -r para eliminar el crontab completo de un usuario.

crontab -r

Este comando elimina todas las entradas de trabajo cron especificadas para el usuario. Si solo desea eliminar una entrada de trabajo específica, utilice crontab -e para editar crontab y eliminar la línea del trabajo que desea eliminar.

Demostración en vídeo

En https://www.youtube.com/watch?v=BpPGoRYTv9I se proporciona una demostración de vídeo si necesita más información sobre cómo trabajar con la utilidad crontab en Oracle Linux 8.

Utilidad Cron de tareas de automatización de Oracle Linux 8

Más información

Más recursos de aprendizaje

Explore otras prácticas en docs.oracle.com/learn o acceda a contenido de aprendizaje más gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de formación de Oracle.

Para obtener documentación sobre los productos, visite Oracle Help Center.