| * | * | * | * | * |
ID | Minuto | Hora | Día-Fecha | Mes | Nombre del día |
Valores | 0-59 | 0 -23 | 1-31 | 1-12 | 0-6 |
NOTA:Los nombres de los días 0-6 comienzan con el domingo.
Para programar una tarea, reemplaza el asterisco apropiado con el valor deseado.
Pongámoslo en práctica rápida. Si tiene un crontab como el siguiente, ¿cuándo cree que se ejecutará el trabajo?
0 0 * * 0
P:¿Cuándo se ejecutará el comando si configura el trabajo de esta manera?
A. Cada hora de lunes a sábado
B. Cada minuto los domingos
C. Solo a la medianoche de lunes a sábado
D. Solo a medianoche los domingos
La respuesta aquí es D. Ejecutar "comando" a las 00:00 [medianoche] todos los domingos.
Configura crontab cccess para tu cuenta de usuario
Crontab es específico del usuario. Ya lo tocaste un poco. Si cree que existe la posibilidad de que ya haya usado crontab antes, puede verificarlo usando crontab -l .
[email protected]:~$ crontab -l
no crontab for christopher
[email protected]:~$ crontab -e
no crontab for christopher - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/code
3. /bin/ed
Choose 1-3 [1]: 1
Cuando ejecuto este comando, puede ver que no tengo crontab en este sistema.
Como aún no he creado un crontab, cuando uso -e
para editar la tabla, me solicita mi editor de texto preferido. Nano se sugiere como el programa más fácil de usar. Puede usar cualquier editor de texto de línea de comando como Vim o Emacs. Realmente depende de ti.
Si al principio no tiene éxito, Sudo
Si intenta el crontab -e pero no obtiene este resultado, es posible que no tenga los privilegios de usuario para crear la tabla. Si tiene acceso a sudo, puede usar sudo para configurar el crontab.
sudo crontab -e <your_username>
Su sistema cargará automáticamente su crontab en el destino adecuado, que puede variar según la distribución, pero a menudo se encuentra en un directorio como /var/spool/cron/crontabs . No intente editar archivos aquí.
¿Qué sucede si el trabajo cron encuentra un error?
El comportamiento predeterminado es enviar por correo electrónico su salida. Esta función está diseñada para administradores que pueden enviar automáticamente registros a un correo electrónico "local" en el dominio de la red.
Puede configurarlo usted mismo si tiene un servidor de correo. También hay formas de automatizar la salida de correo electrónico a GMail o servicios similares. Sin embargo, esos métodos están más allá del alcance de este artículo.
En su lugar, veremos dos formas comunes de evitar el error.
1) Enviar salida a un archivo
Puede designar un archivo para enviar este tipo de salida y luego usar >>
para redirigir la salida.
Usando >>
agregará información a un archivo existente, mientras que un único >
El símbolo sobrescribirá el archivo. Es importante saber esto si desea mantener un archivo de registro grande que actualice los registros con frecuencia. Ambos crearán automáticamente el archivo si no existe.
Ejemplo de trabajo cron:
0 * * * * echo "Linux is Cool!" >> ~/crontab_log.txt
2) Usar /dev/null
Esto omitirá la opción de correo electrónico al eliminar, en esencia, los datos. El error estándar ('2') y la salida estándar ('1') se envían al archivo nulo.
0 0 * * * echo "Why are you silencing me every night at midnight?" > /dev/null 2>&1
Es posible que haya notado que estoy usando comandos de eco para los ejemplos. No hay una razón particular para eso, pero facilita la verificación de cambios y "verifica tu trabajo".
Si ha realizado algo de programación, es posible que haya utilizado comandos de impresión para probar su lógica. Este es el mismo concepto.
Intentemos configurar nuestro propio trabajo cron. Si ya has estado "siguiendo el juego", eso es genial. Si no, ahora es el momento de preparar ese terminal y divertirse.
Ejemplos de crontab:programación de comandos y scripts
Le mostré un par de ejemplos mientras explicaba cómo se enruta la salida. ¿Tuvieron sentido para ti?
Déjame explicarte el primer ejemplo.
Minuto | Hora | Día-Fecha | Mes | Nombre del día | Comando |
0 | * | * | * | * | echo "¡Linux es genial!">> ~/crontab_log.txt |
Establecer el valor de los minutos en '0' significa que el comando se ejecutará cada hora, en punto.
Horarios de trabajo avanzados
Puede editar varios valores a la vez. Si lo desea, puede reemplazar los 5 asteriscos con especificaciones.
Minuto | Hora | Día-Fecha | Mes | Nombre del día | Comando |
*/5 | 3-6 | */5 | */2 | 0,6 | echo "¡Linux es genial!">> ~/crontab_log.txt |
¿Alguna idea de lo que dice este? Por el bien de este tutorial, hice este trabajo particularmente confuso. Sería inusual tener algo con tantos parámetros “en la naturaleza”, pero veamos si puedes descifrarlo. Para algo como esto, me gusta trabajar hacia atrás a través de los campos.
Intentémoslo juntos:
Campo | Valor | Significado |
Nombre del día | 0,6 | Sábado y Domingo |
Mes | */2 | Cada mes que es divisible por 2 (pares) meses. |
Día Fecha | * | Cada fecha |
Hora | 3-6 | Entre las 3 y las 6 de la mañana |
Minutos | */5 | Cada 5 minutos |
En Lenguaje Sencillo:
Por lo tanto, cada dos meses, los fines de semana, independientemente de la fecha, este comando se ejecutará cada 5 minutos entre las 3 am y las 6 am.
Wow, eso fue enrevesado. Si pudiste seguir eso, estás preparado para cronear con los mejores.
Escriba un simple script de automatización cron para realizar copias de seguridad de archivos
Hasta este punto, los trabajos cron que ha escrito solo han hecho una cosa. Eso puede ser útil, pero tal vez quieras hacer varias tareas.
Afortunadamente, esto no solo es posible, sino también muy fácil. Si recuerda el ejemplo de sintaxis original, también puede usar una ruta a un script.
Esto no se limita solo a bash, también puede implementar un script que use Python o Perl si lo desea.
¿Cuáles son nuestros objetivos?
- Los trabajos se procesarán a las 3 a. m. cada noche
- Copia de seguridad de la carpeta /Documentos en un archivo zip
- Genera un archivo de texto con una lista de todo lo que hay en el directorio
- Cree una carpeta de archivo que clone nuestra copia de seguridad y el archivo de texto en una subcarpeta con la fecha actual
our_backup_script.sh
#! /bin/bash
DATE=$(date +%d-%m-%Y)
# Date in format DAY##-MONTH##-YEAR####
mkdir -p ~/archive/$DATE
# create a folder for today's date in the archive, if archive doesn't exist, make archive
ls -al ~/Documents > ~/archive/$DATE/contents.txt
# create a text file listing the contents of the documents folder
cd ~/ && tar -cpzf $DATE.docs.backup.gz Documents/*
# change to parent directory to tar /Documents folder
cp ~/$DATE.docs.backup.gz ~/archive/$DATE/documents_archive.gz
# one .gz file is left in the home directory, a clone is sent to our archive under it's date
[email protected]:~$ ls
Desktop Downloads Music Pictures Public Videos
Documents ENV our_backup_script.sh projects Templates 'VirtualBox VMs'
[email protected]:~$ bash our_backup_script.sh
[email protected]:~$ ls
25-11-2019.docs.backup.gz Documents Music projects Videos
archive Downloads our_backup_script.sh Public 'VirtualBox VMs'
Desktop ENV Pictures Templates
[email protected]:~$ ls archive/25-11-2019/
contents.all_files.txt documents_archive.gz
Todo lo que queda por hacer es convertir este script en un trabajo cron.
crontab -e
Y agregue lo siguiente allí:
0 3 * * * bash ~/our_backup_script.sh
¿El tuyo tuvo éxito? el mio lo era De hecho, me gustó tanto la idea que podría mantener esto como una copia de seguridad diaria. Una modificación que haré es mover mi archivo a una carpeta en mi máquina que se sincroniza con el almacenamiento en la nube.
Otra forma de programar trabajos en Linux es usando el comando. Puede que también te interese aprender sobre eso.
¿Tienes alguna idea para un guión que quieras crear? ¿Te ayudó este artículo a comprender mejor crontab? Comparte con nosotros en los comentarios.