Nota:
- Este tutorial está disponible en un entorno de laboratorio gratuito proporcionado por Oracle.
- Utiliza valores de ejemplo para las credenciales, el arrendamiento y los compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por valores específicos de su entorno en la nube.
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.
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 bien puede programar programas para que se ejecuten como trabajos dentro de su 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 una programación regular bajo sus propias credenciales de usuario. El crontab permite programar trabajos para que se ejecuten tan a menudo como cada minuto o con poca frecuencia como una vez al año; sin embargo, debe tener en cuenta que el trabajo cron no se ejecutará si el sistema está caído durante el tiempo en que se programó la ejecución del trabajo.
Tenga en cuenta que la configuración de 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?
- Sistema con Oracle Linux instalado
Objetivos
En este tutorial aprenderá a:
- Mostrar el contenido de una crontab existente
- Crear y editar entradas crontab
- Acceder a la salida crontab
- Eliminar crontab completo de un usuario
Muestra el contenido del archivo crontab
Nota: Al utilizar el entorno de prácticas gratuitas, consulte Aspectos básicos de las prácticas de Oracle Linux para obtener información sobre 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
-
Utilice el comando
crontab –e
para abrir crontab en el editor predeterminado:crontab -e
El editor predeterminado en Oracle Linux es el editor de vim.
-
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 el borde:
- Puede saltar a la parte inferior del archivo pulsando 'Mayús-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.
- Escriba ':wq' para escribir el archivo y en todo el editor.
Este paso instala crontab y lo activa inmediatamente:
crontab: installing new crontab
-
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, seguidos 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 las tuberías y los operadores de redirección.
Compruebe la salida de la entrada cron
No hay ningún agente de transporte de correo (MTA) instalado en un sistema mínimo de Oracle Linux o en una imagen de plataforma de Oracle Linux, por defecto. Cuando no se encuentra MTA, el daemon cron dirige la salida de los comandos especificados en crontab al daemon de Syslog. En una nueva instalación de Oracle Linux, puede ver la salida de 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 sólo 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 ol-server CROND[68564]: (oracle) CMD (echo "Hello World")
Jun 30 12:39:02 ol-server CROND[68551]: (oracle) CMDOUT (Hello World)
Esta salida muestra al usuario como se ejecuta el comando, el comando que se ejecutó y, a continuación, la salida del comando.
Si se instala una MTA, como postfix o sendmail, cron dirige la salida de la entrada crontab a la cola de correo del usuario como se ejecuta la entrada crontab. Esto se trata 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:
- minuto: De 0 a 59
- hora: De 0 a 23
- día: De 1 a 31
- mes: del 1 al 12, o el nombre del mes
- día de la semana: de 0 a 7, o el nombre abreviado del día. Tenga en cuenta que 0 y 7 representan ambos el domingo.
Se pueden utilizar caracteres especiales en cualquiera de los campos de tiempo:
- Asterisco (*): especifica que el comando se debe ejecutar para cada instancia del campo
- Guion (-): se puede utilizar para indicar un rango. Por ejemplo, en el campo Día de la semana, puede especificar 1-5 para programar que la tarea se ejecute de lunes a viernes, pero que no se ejecute el sábado o el domingo.
- Coma (,): se puede utilizar para especificar una lista de valores para un campo. Por ejemplo, en el campo de hora, puede especificar 6,18 para programar la ejecución de la tarea a las 6 a. m. y a las 6 p. m.
- Barra inclinada (/): se puede utilizar para especificar valores de paso. Por ejemplo, puede especificar */15 en el campo de minutos para programar una tarea para que se ejecute cada 15 minutos.
El crontab también permite utilizar una extensión abreviada especial para sustituir los campos de hora de los requisitos de tiempo generales. Es importante destacar que esta abreviatura también incluye una opción para ejecutar un comando después del reinicio:
- @reboot: se ejecuta una vez después del reinicio.
- @yearly: ejecutar una vez al año, es decir, "0 0 1 1 *".
- @annually: ejecutar una vez al año, es decir, "0 0 1 1 *".
- @monthly: ejecutar una vez al mes, es decir, "0 0 1 * *".
- @weekly: ejecutar una vez a la semana, es decir, "0 0 * * 0".
- @daily: ejecutar una vez al día, es decir, "0 0 * * *".
- @hourly : se ejecuta una vez por hora, es decir, "0 * * * * *".
Tenga en cuenta que crontab solo proporciona granularidad de 1 minuto. No es sencillo establecer una entrada crontab que se ejecute con más frecuencia que cada minuto. Si está buscando una herramienta que pueda manejar esto, considere examinar las unidades de temporizador de Systemd.
Edite crontab para probar diferentes comandos en ejecución en secuencias de tiempo diferentes
-
Utilice el comando
crontab –e
para abrir crontab en el editor predeterminado:crontab -e
-
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"
-
Guardar el archivo crontab y salir.
Sintaxis del comando Crontab
El comando crontab se ejecuta bajo las credenciales del usuario al que pertenece crontab y se ejecuta con algunas variables de entorno predeterminadas definidas, incluidas:
- INICIO: El directorio principal del usuario con el que se ejecuta crontab
- LOGNAME: equivalente al nombre de usuario del usuario que crontab ejecuta como
- USER: nombre de usuario del usuario que se ejecuta crontab como
- SHELL: el archivo binario del shell que se utiliza para ejecutar comandos. Por defecto, se define en
/bin/sh
. - PATH: ruta disponible para la utilidad crontab. Por defecto, se define en
/usr/bin:/bin
.
Puede definir variables de entorno alternativas especificándolas como líneas dentro de crontab que no incluyan campos de tiempo, por ejemplo, si prefiere utilizar el shell bash y desea importar regularmente todas las variables y configuraciones con la 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 enviada por correo para el trabajo como resultado, utilice redirecciones de shell estándar para la salida STDOUT y STDERR en el comando:
* * * * * /path/to/command > /dev/null 2>&1
Como alternativa, 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 su crontab para experimentar con la sintaxis del comando
-
Abra crontab en un editor con el comando
crontab -e
. -
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 el % de caracteres a caracteres de nueva línea y todos los datos posteriores al primer % se envían al comando como entrada estándar. Consulte
man 5 crontab
para obtener más información. -
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 de crontab en la cola de correo local
Si se instala una 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 activa el sufijo en un sistema, lea también Oracle Linux: Instalar el servidor de correo electrónico de Postfix para obtener información sobre cómo configurarlo correctamente.
Para que el manejo de correo crontab funcione correctamente, debe instalar, configurar y activar un MTA correctamente. Para este ejercicio, simplemente puede realizar los siguientes pasos para activar el MTA postfix para manejar el correo local:
-
Instale el paquete postfix:
sudo dnf install -y postfix
-
Active e inicie el servicio de revisión. La configuración por defecto activa el sufijo como una MTA de entrega local únicamente:
sudo systemctl enable --now postfix.service
-
Reinicie el servicio en línea, 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 del usuario. La cola de correo normalmente se almacena 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 a medida que 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 configurando la variable de entorno MAILTO en su crontab, pero el sistema debe configurarse para manejar la entrega de correo externo. Si define el entorno MAILTO en un valor vacío, la salida se desecha y no se envía ningún correo para ningún trabajo cron del crontab.
Eliminar crontab completo
Utilice el comando crontab -r
para eliminar todo el crontab 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.
Consulte man 5 crontab
y man systemd.timer
para obtener más información sobre estas funciones.
Demostración en vídeo
En Oracle Linux Automating Tasks Cron Utility, se ofrece una demostración de vídeo si necesita más información sobre cómo trabajar con la utilidad crontab en Oracle Linux.
Más información
- Oracle Linux: instalación del servidor de correo electrónico de Postfix
- Documentación de Oracle Linux
- Oracle Learning Library
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer y conviértase en Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Use the Crontab Utility to Schedule Tasks on Oracle Linux
F49749-04
July 2022
Copyright © 2021, Oracle and/or its affiliates.