Quieres programar una tarea para que se haga ciertos días a ciertas horas, todos los dias...?? este simple comando de consola puede hacer todas aquellas tareas que le ordenemos :)
Existe en Linux una utilidad que no muchos conocen y que resulta a veces imprescindible:
crontab.
crontab permite programar lo que se llaman
crones, esto es, tareas que se ejecutarán en un momento determinado del tiempo de manera automática. El sistema Linux (y cualquier UNIX en general) comprueba regularmente, guiándose por el
evento de reloj del sistema, si existe alguna tarea programada para ejecutarse y, en caso afirmativo, la ejecuta sin necesidad de que nadie (ningún usuario) lo haga explícitamente.
En primera instancia, algunas aplicaciones que se nos pueden ocurrir para algo así podrían ser:
- Apagar un equipo a la hora que nosotros queramos: Por ejemplo, mientras dormimos podremos dejarlo bajando cosas de internet haciendo que se apague solo por la mañana.
- Crear backups: Podríamos programar un cron para que, a cierta hora de ciertos días de la semana o del mes, realizase un backup de nuestros datos de manera automática, sin tener que recordar nosotros el hacerlo.
- Poner mensajes recordatorios: Para que nos salga en pantalla una ventana recordándonos que hagamos algo que podría olvidársenos.
- Y muchísimas otras...
La herramienta
crontab nos permite programar una tarea para que se ejecute especificando:
- La hora (0-23)
- Los minutos (0-59)
- El día del mes (1-31)
- El día de la semana (0-7: tanto 0 como 7 representan al domingo)
- El mes (1-12)
Y además en cualquiera de estos parámetros nos permitirá especificar, mediante un *, que deseamos que ocurra
todos los minutos, las horas, los días del mes, los meses, o los días de la semana.
También podremos especificar
listas separando mediante una coma, por ejemplo, podremos poner 1,15 en la columna del día del mes para que la tarea se ejecute cada dia 1 y 15 de mes.
Al igual que con las listas, podremos también especificar
rangos mediante un guión, de manera que 1-4 en la columa del día de la semana significaría
de lunes a jueves.
Los crontab's de usuario.
En un sistema Linux, cada usuario tendrá su propio
crontab, incluido root. Por supuesto, en el crontab de cada usuario sólo se permitirá ejecutar tareas para las que ese usuario tenga permisos (por ejemplo, un usuario que no sea root no podrá apagar el sistema).
Manejo del comando crontab.Para usar la funcionalidad de
crontab, el comando nos ofrece, de manera básica, las siguientes posibilidades:
Ver nuestra tabla de tareas programadasEsto lo haremos con:
Editar nuestra tabla de tareas programasPara editar nuestras tareas
cron, ejecutaremos:
...y obtendremos un editor (el que hayamos definido en la variable de entorno $EDITOR) en el que podremos añadir líneas a nuestro fichero de crontab, una por cada tarea que deseemos programar, en el formato que se explicará más abajo.
Borrar nuestra tabla de tareas programasPodremos borrar toda nuestra programación de tareas con:
El formato de las entradas de crontab.Cuando añadamos una entrada a nuestro crontab, lo haremos en una sola línea y con el siguiente formato:
[minutos] [hora] [día] [mes] [dia_de_semana] [comando]
|
Pongamos algunos ejemplos:
Para apagar el equipo a las siete y media de la mañana del 15 de febrero (ojo, hay que ser root para ejecutar esto):
30 7 15 2 * /sbin/shutdown -h now
|
Para hacer un .tar.gz de un directorio (como backup, por ejemplo), todos los días laborables a las 14:00:
0 14 * * 1-5 tar -czf /home/backups/backup.tar.gz /usr/importante/
|
Para que, cada hora, los sábados y domingos, se guarde en un fichero de log las conexiones de red abiertas en el sistema:
0 * * * 6,7 date >> /var/log/net_con.log; netstat -t >> /var/log/net_con.log
|
...Como se puede ver, es súmamente fácil de manejar y muy potente.