Digamos que el cron se compone básicamente de dos “partes” el daemon y el fichero de configuración.
El daemon se llama crond y es el encargado de leer el fichero de configuración /etc/crontab. Lo hace cada 60 segundos, en busca de cambios en dicho fichero e incorporar así tareas al sistema.
usage: crontab [-u user] file
crontab [-u user] { -e | -l | -r }
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
Para editar la lista de tareas correspondiente al usuario activo:
crontab -e
Ver la lista de tareas asignadas al usuario activo:
crontab -l
Eliminar la lista de tareas para el usuario activo:
crontab -r
Editado dicho archivo encontraremos algo parecido a esto:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
El primer campo, SHELL, es el entorno donde se ejecutarán las órdenes, por defecto suele venir bash, a menos que prefieran/usen otra shell.
El segundo es PATH, allí se colocarán los directorios dónde se desea que crond busque los programas a ejecutar. Debe tenerse en cuenta que solo buscará en esos directorios y no en los declarados en el PATH del usuario. Si el programa no está en una de esos directorios hay 2 posibilidades:
El tercero, manda los outputs del cron al root, o a quien queramos.Si queremos que no se envie nada sólo debemos dejar la variable así: MAILTO=”” o borrar toda la linea.
Los /etc/cron.hourly, daily…son fichero que usa cron para su gestión interna y los lanza cada día.
Las líneas en blanco, los espacios iniciales y los tabuladores se ignoran al momento de procesar la lista de tareas.
Los comentarios en este fichero son líneas completas cuyo primer carácter que no sea un espacio es un carácter #.
Las línea de programación de tareas siguen un formato estándar formada por cinco campos que indican un instante de ejecución y la ruta del fichero que hay que ejecutar.
Los campos que describen el instante de ejecución son por orden:
Un campo puede contener:
Describamos un poco el comportamiento:
Por ejemplo, si ponemos un asterisco (*) en algún campo, por ejemplo el mes, esto hará que se ejecute la orden todos los meses, y luego respetará los demás valores, tales como el día o la hora.
Si queremos indicar un rango de enteros, lo haremos con un guión (-).
Si queremos indicar enteros separados, se harán con comas (,), por ejemplo: 1, 2, 3.
Podemos concretar o excluir valores usan la barra (/), es decir, si queremos que una orden se ejecute durante los 0-59 minutos de una hora menos en el minuto 15, pues lo marcaremos haciendo: 0-59/15.
También podemos hacer que una orden que se ejecute en un determinado minuto, haciendo: */25. Esto hará que nuestra tarea se ejecute siempre en el minuto 25.
El uso de la barra (/) y el asterisco (*) puede emplearse en todos los campos. Si queremos que una tearea no sea ejecutada sólo debemos comentar esa linea al principio con la “almohadilla” o “numeral” (#).
Los cinco(5) primeros campos pueden ser reemplazados por 8 valores especiales:
| valor | significado |
|---|---|
| @reboot | Ejecutar una sola vez, al inicio del sistema |
| @yearly | Ejecutar una vez al año, “0 0 1 1 *” |
| @annually | (igual a @yearly) |
| @monthly | Ejecutar una sola vez al mes, “0 0 1 * *” |
| @weekly | Ejecutar una sola vez a la semana, “0 0 * * 0” |
| @daily | Ejecutar una sola vez al día, “0 0 * * *” |
| @midnight | (igual a @daily) |
| @hourly | Ejecutar cada hora, “0 * * * *” |
Varias formas de configurar la ejecución de la orden /usr/bin/fetchmail:
Ejecutarlo a las 12 de la noche cada día
0 0 * * * /usr/bin/fetchmail
Ejecutarlo a las 12 :15 de la noche cada día
15 0 * * * /usr/bin/fetchmail
Ejecutarlo 15 después de cada hora exacta, a las y cuarto
15 * * * * /usr/bin/fetchmail
Ejecutarlo el día 1 del mes a las 6:30
30 6 1 * * /usr/bin/fetchmail
Ejecutarlo cada dos día a las 6:30
30 6 */2 * * /usr/bin/fetchmail
Ejecutarlo los días 1,3,7,12,15 y 20 del mes a las 6:30
30 6 1,3,7,12,15,20 * * /usr/bin/fetchmail
Ejecutarlo el día 1 de julio a las 6:30
30 6 1 7 * /usr/bin/fetchmail
Ejecutarlo los lunes cada 10 minutos
*/10 * * * 1 /usr/bin/fetchmail
Ejecutarlo de lunes a viernes a las hora en punto
0 * * * 1-5 /usr/bin/fetchmail