Crear un trabajo recurrente con crontab -e
En este paso, aprenderás a programar una tarea recurrente utilizando cron. A diferencia de at, que ejecuta un trabajo una sola vez, cron está diseñado para ejecutar trabajos repetidamente según un horario. Gestionarás tus trabajos programados en un archivo especial llamado crontab.
Para editar el archivo crontab de tu usuario, utiliza el comando crontab -e. La -e significa "edit" (editar).
Abramos el archivo crontab para editarlo.
crontab -e
Si es la primera vez que ejecutas crontab -e, es posible que se te pida que elijas un editor de texto predeterminado. Recomendamos nano porque es fácil de usar.
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
...
Choose 1-2 [1]:
Pulsa 1 y luego Enter para seleccionar nano. Se abrirá el archivo crontab. Estará mayoritariamente vacío, a excepción de algunos comentarios que explican cómo usarlo.
Una entrada de crontab tiene un formato específico con seis campos:
minuto hora día-del-mes mes día-de-la-semana comando
Un asterisco (*) en un campo de tiempo actúa como comodín, lo que significa "todos/cada". Para nuestra tarea, queremos ejecutar un comando cada minuto. Esto es perfecto para realizar pruebas porque no tenemos que esperar mucho para ver el resultado. La programación para "cada minuto" es * * * * *.
Ahora, añade una nueva línea al final del archivo para programar un trabajo que añada la fecha y hora actuales a un archivo de registro llamado cron_log.txt en tu directorio de proyecto.
* * * * * date >> ~/project/cron_log.txt
Después de añadir la línea, tu editor debería verse algo parecido a esto:
## Edit this file to introduce tasks to be run by cron.
#
## Each task to run has to be defined through a single line
## indicating with different fields when the task will be run
## and what command to run for the task
#
## To define the time you can provide concrete values for
## minute (m), hour (h), day of month (dom), month (mon),
## and day of week (dow) or use '*' in these fields (for 'any').
#
## Notice that tasks will be started based on the cron's system
## daemon's notion of time and timezones.
#
## Output of the crontab jobs (including errors) is sent through
## email to the user the crontab file belongs to (unless redirected).
#
## For example, you can run a backup of all your user accounts
## at 5 a.m. every week with:
## 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
## For more information see the manual pages of crontab(5) and cron(8)
#
## m h dom mon dow command
* * * * * date >> ~/project/cron_log.txt
Para guardar el archivo y salir de nano, presiona Ctrl-X, luego presiona Y para confirmar los cambios y, por último, presiona Enter para escribir en el archivo.
Una vez que salgas, verás un mensaje de confirmación en tu terminal:
crontab: installing new crontab
Esto significa que tu nuevo trabajo de cron está activo. El demonio cron revisará ahora este archivo cada minuto y ejecutará tu comando.
Espera al menos un minuto. Luego, verifica que se haya creado el archivo de registro.
ls -l ~/project/cron_log.txt
Deberías ver el archivo en la lista.
-rw-r--r-- 1 labex labex 29 Jan 1 12:15 /home/labex/project/cron_log.txt
Ahora, visualiza su contenido.
cat ~/project/cron_log.txt
La salida mostrará la fecha y la hora en que se ejecutó el comando por primera vez.
Mon Jan 1 12:15:01 UTC 2024
Si esperas otro minuto y vuelves a ejecutar el comando cat, verás una nueva línea con una marca de tiempo actualizada, lo que demuestra que el trabajo se está ejecutando repetidamente.