INDICE
- Ordenadores
- Sistemas Operativos
- Linux
- Cómo programar trabajos en Linux: Comandos de At y Crontab
Libro Relacionado
Linux All-In-One para tontos, 6ª Edición
Por Emmett Dulaney
Como administrador de sistemas Linux, es posible que tenga que ejecutar algunos programas automáticamente a intervalos regulares o ejecutar uno o más comandos en un momento específico en el futuro. Su sistema Linux incluye la posibilidad de programar trabajos para que se ejecuten en cualquier fecha u hora futura que desee. También puede configurar el sistema para que realice una tarea periódicamente o sólo una vez. Estas son algunas de las tareas típicas que puede realizar programando tareas en su sistema Linux:
- Haga una copia de seguridad de los archivos en medio de la noche.
- Descargue archivos grandes a primera hora de la mañana cuando el sistema no esté ocupado.
- Envíese mensajes como recordatorios de reuniones.
- Analice los registros del sistema periódicamente y busque cualquier actividad anormal.
Puede configurar estos trabajos usando la función at command o la función crontab de Linux.
Cómo programar trabajos de una sola vez en Linux
Si desea ejecutar uno o más comandos posteriormente, puede utilizar el comando at. El atddaemon – un programa diseñado para procesar trabajos enviados con at – ejecuta sus comandos a la hora especificada y le envía la salida por correo.
Antes de probar el comando at en Linux, necesita saber que los siguientes archivos de configuración controlan qué usuarios pueden programar tareas usando el comando at:
- /etc/at.allow contiene los nombres de los usuarios que pueden usar el comando at para enviar trabajos.
- /etc/at.deny contiene los nombres de los usuarios a los que no se les permite usar el comando at para enviar trabajos.
Si estos archivos no están presentes, o si encuentra un archivo /etc/at.deny vacío, cualquier usuario puede enviar trabajos usando el comando at. El valor por defecto en Linux es un archivo /etc/at.deny vacío; cuando este valor por defecto está en su lugar, cualquiera puede usar el comando at. Si no quiere que algunos usuarios usen el archivo /etc/at.deny, simplemente liste sus nombres de usuario en el archivo /etc/at.deny.
Para utilizar at para programar un trabajo de una sola vez en Linux para su ejecución posterior, siga estos pasos:
- Cuando presione Enter, aparecerá el símbolo at>, de la siguiente manera: a las 21:30 horas Este método es la forma más sencilla de indicar la hora a la que desea ejecutar uno o más comandos; simplemente especifique la hora en un formato de 24 horas. En este caso, desea ejecutar los comandos a las 9:30 de esta noche (o mañana, si ya son más de las 9:30 p.m.). Sin embargo, puede especificar el tiempo de ejecución de muchas maneras.
- En el indicador at>, escriba los comandos que desea ejecutar como si estuviera escribiendo en el indicador de comandos del shell. Después de cada comando, presione Enter y continúe con el siguiente comando.
- Cuando termine de introducir los comandos que desea ejecutar, pulse Ctrl+D para indicar el final. Este es un ejemplo que muestra cómo ejecutar el comando ps en un momento futuro:at> psat> <EOT>job 1 at 2018-12-28 21:30Después de pulsar Ctrl+D, el comando at responde con el mensaje <EOT>, un número de trabajo, y la fecha y hora en que se ejecutará el trabajo.
Formatos para el en Comando para la Hora de EjecuciónComandoCuando el Trabajo se Ejecutará ahoraInmediatamente ahora + 15 minutos15 minutos desde la hora actuala ahora + 4 horas4 horas desde la hora actuala ahora + 7 días7 días desde la hora actuala mediodíaAl mediodía de hoy (o mañana, si ya es pasado el mediodía)a la hora siguienteAl mismo tiempo mañana a las 17:00 mañanaA las 5:00 p.m.m. mañana a las 4:45pmA las 4:45 p.m. de hoy (o mañana, si ya han pasado las 4:45 p.m.) a las 3:00 Dec 28, 2018A las 3:00 a.m. del 28 de diciembre de 2018Después de
ingresar uno o más trabajos, puede ver la lista actual de trabajos programados con el comando atq. La salida de este comando es similar a la siguiente:
4 2018-12-28 03:00 a root5 2018-10-26 21:57 a root6 2018-10-26 16:45 a root
El primer campo de cada línea muestra el número de trabajo – el mismo número que el del comando at muestra cuando usted envía el trabajo.
El siguiente campo muestra el año, mes, día y hora de ejecución. El último campo muestra los trabajos pendientes en la cola y el nombre de usuario.
Si desea cancelar un trabajo, utilice el comando atrm para eliminarlo de la cola. Cuando elimine un trabajo con el comando atrm, consulte el trabajo por su número, como se indica a continuación:
atrm 4
Este comando borra el trabajo 4 programado para las 3:00 a.m. del 28 de diciembre de 2018.]
Cuando se ejecuta un job, el mensaje se envía por correo. Escriba mail en una ventana de terminal para leer su correo y ver la salida de sus trabajos.
Cómo programar trabajos recurrentes en Linux
Aunque es bueno para ejecutar comandos en un momento específico, no es útil para ejecutar un programa automáticamente a intervalos repetidos. Tiene que usar crontab para programar estos trabajos recurrentes, por ejemplo, si desea realizar una copia de seguridad de sus archivos para grabarlos a medianoche todas las noches.
Los trabajos periódicos se programan colocando la información del trabajo en un archivo con un formato específico y enviando este archivo con el comando crontab. El demonio cron – crond – comprueba la información del trabajo cada minuto y ejecuta los trabajos recurrentes en los momentos especificados. Debido a que el demonio cron procesa trabajos recurrentes, estos trabajos también se conocen como trabajos cron.
Cualquier salida de un trabajo cron se envía por correo al usuario que envía el trabajo. (En el archivo de información del trabajo enviado, puede especificar un destinatario diferente para la salida enviada por correo).
Dos archivos de configuración controlan quién puede programar tareas cron en Linux usando crontab:
- /etc/cron.allow contiene los nombres de los usuarios que pueden usar el comando crontab para enviar trabajos.
- /etc/cron.deny contiene los nombres de los usuarios a los que no se les permite usar el comando crontab para enviar trabajos.
Si existe el archivo /etc/cron.allow, sólo los usuarios listados en este archivo pueden programar trabajos de cron. Si sólo existe el archivo /etc/cron.deny, los usuarios listados en este archivo no pueden programar trabajos de cron. Si no existe ningún archivo, la configuración predeterminada de Linux permite a cualquier usuario enviar trabajos cron.
Para enviar un trabajo cron en Linux, siga estos pasos:
- Prepare un script shell (o un programa ejecutable en cualquier lenguaje de programación) que pueda realizar la tarea recurrente que desea realizar.
- Prepare un archivo de texto con información sobre los momentos en los que desea que se ejecute el script de shell o el programa (desde el Paso 1); luego envíe este archivo usando crontab.Usted puede enviar varios trabajos recurrentes con un solo archivo. Cada línea con información de tiempo sobre un trabajo tiene un formato estándar, con seis campos. Los primeros cinco campos especifican cuándo se ejecuta el trabajo, y los campos sexto y siguientes constituyen el comando que se ejecuta. Aquí hay una línea que ejecuta el shell script de mi trabajo en el directorio raíz de un usuario 5 minutos después de la medianoche de cada día:5 0 * * * * $HOME/myjobLa siguiente tabla muestra el significado de los primeros cinco campos. Nota: Un asterisco (*) significa todos los valores posibles para ese campo. Además, una entrada en cualquiera de los primeros cinco campos puede ser un solo número, una lista de números separados por comas, un par de números separados por un guión (que indica un rango de números) o un asterisco.
Formato para el momento de ejecución en crontab FilesField Number Significado del campoRango aceptable de valores*1Minuto0-592Hora del día0-233Día del mes0-314Mes1-12 (1 significa enero, 2 significa febrero, y así sucesivamente) o los nombres de los meses que usan las primeras tres letras – enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre, Nov, Dic5Día de la semana0-6 (0 significa Domingo, 1 significa Lunes, y así sucesivamente) o las abreviaturas de tres letras de los días de la semana – Sol, Lun, Mar, Miércoles, Jue, Vie, Sáb*
Un asterisco en un campo significa todos los valores posibles para ese campo. Si hay un asterisco en el tercer campo, por ejemplo, el job se ejecuta todos los días.
Si el archivo de texto jobinfo (en el directorio actual) contiene la información del trabajo, envíe esta información a crontab con el siguiente comando:
crontab jobinfo
¡Eso es todo! Estás listo con el trabajo de cron.
A partir de ahora, el trabajo cron se ejecutará a intervalos regulares (como se especifica en el fichero de información del trabajo) y recibirá mensajes de correo electrónico con la salida del trabajo.
Para verificar que el trabajo está efectivamente programado en Linux, escriba el siguiente comando:
crontab -l
La salida del comando crontab -l muestra las tareas cron actualmente instaladas en su nombre. Para eliminar sus trabajos de cron, escriba crontab -r.
Si inicia sesión como root, también puede configurar, examinar y eliminar tareas de cron para cualquier usuario. Para configurar tareas cron para un usuario, utilice este comando:
crontab _u nombredeusuario nombredearchivo
Aquí, el nombre de usuario es el usuario para el que se instalan los trabajos de cron, y el nombre de archivo es el archivo que contiene información sobre los trabajos.
Utilice el siguiente formulario del comando crontab para ver las tareas de cron para un usuario:
crontab _u nombre de usuario -l
Para eliminar las tareas de cron de un usuario, utilice el siguiente comando:
crontab -u nombre de usuario -r
Nota: El demonio cron también ejecuta las tareas cron listadas en el archivo de tareas cron de todo el sistema /etc/crontab. Aquí hay un típico fichero /etc/crontab de un sistema Linux (escriba cat /etc/crontab para ver el fichero):
SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# run-parts01 * * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly
Las primeras cuatro líneas configuran varias variables de entorno para los trabajos listados en este archivo. La variable de entorno MAILTO especifica el usuario que recibe el mensaje de correo con la salida de los trabajos de cron en este archivo.
La línea que comienza con # es una línea de comentario. Las cuatro líneas que siguen al comentario de run-parts ejecutan el shell script de run-parts (ubicado en el directorio /usr/bin) en varios momentos con el nombre de un directorio específico como argumento. Cada argumento a run-parts – /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, y /etc/cron.monthly – es un directorio. Esencialmente, run-parts ejecuta todos los scripts ubicados en el directorio que usted proporciona como argumento.
La siguiente tabla enumera los directorios donde puede encontrar estos scripts y cuándo se ejecutan. Tienes que mirar los scripts en estos directorios para saber qué se ejecuta a estos intervalos.
Directorios de guión para cron Jobs
Directorio NameScript Ejecuta/etc/cron.hourlyCada hora/etc/cron.dailyCada día/etc/cron.weeklyWeekly/etc/cron.monthlyUna vez al mes