====== CRONTAB / CROND ======
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.
===== Comandos =====
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
===== /etc/crontab =====
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:
* agregar el directorio a este campo. Los directorios se separan con dos puntos(:)
* incluir el path completo en la linea de comando
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.
===== Campos de crontab =====
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:**
- minutos --> enteros de entre 0-59
- horas --> enteros de 0-23
- dia --> enteros de 1-31
- mes --> enteros de 0-12 o mes dic-jan-feb...dic
- día de la semana --> enteros 0-7 o sun-mon-tue...sun
- orden a ejecutar --> ls -h > /home/test/ls.txt
**Un campo puede contener:**
* Un un asterisco (*) para indicar todos los posibles valores
* Un valor fijo para indicar un minuto, hora, día o mes
* Un rango de valores, dos números separados por guiones. Un rango puede terminar en /numero para indicar el incremento
* Una lista de valores separados por comas
* Un valor */numero para indicar todos los valores con incremento de "número"
**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 * * * *"|
===== Ejemplos de uso =====
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