meta data de esta página
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previaPróxima revisiónAmbos lados, revisión siguiente | ||
linux:cron [2010/11/18 13:46] – lc | linux:cron [2013/12/16 10:13] – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | ====== Cron ====== | + | ===== CRON ===== |
- | + | ||
El cron es un servicio usado para ejecutar órdenes a intervalos de tiempo. Las tareas se pueden programar por cada usuario o para el sistema. | El cron es un servicio usado para ejecutar órdenes a intervalos de tiempo. Las tareas se pueden programar por cada usuario o para el sistema. | ||
Línea 23: | Línea 23: | ||
Hay varias formas de usar cron | Hay varias formas de usar cron | ||
- | === General | + | |
+ | ==== Por el Sistema ==== | ||
+ | Para editar el del sistema, metemos las tareas en / | ||
+ | |||
+ | Cada tarea se añade indicando 5 campos que indican el período de ejecución, en las del sistema (/ | ||
+ | |||
+ | Los 5 campos que indican el período son | ||
+ | * minutos | ||
+ | * horas | ||
+ | * día del mes | ||
+ | * mes | ||
+ | * día de la semana | ||
+ | |||
+ | Los posibles valores que puede tomar | ||
+ | |||
+ | * Un asterisco (*) indican todos los valores | ||
+ | * Una lista de números separados por comas | ||
+ | * Un rango, declarado como dos números separados por un guión | ||
+ | * Cada cierto tiempo, con una barra (valor/ | ||
+ | |||
+ | ^Ejemplo^Descripción^ | ||
+ | |59 11 * 1-3 1,2,3,4,5|A las 11:59 a.m. de lunes a viernes, de enero a marzo| | ||
+ | |45 * 10-25 * 6-7|l minuto 45 de todas las horas de los días 10 al 25 de todos los meses y que el día sea sábado o domingo| | ||
+ | |10,30,50 * * * 1,3,5|En el minuto 10, 30 y 50 de todas las horas de los días lunes, miércoles y viernes| | ||
+ | |*/15 10-14 * * *|cada quince minutos de las 10:00a.m. a las 2:00p.m.| | ||
+ | |* 12 1-10/2 2,8 *|Todos los minutos de las 12 del día, en los días 1,3,5,7 y 9 de febrero a agosto. (El incremento en el tercer campo es de 2 y comienza a partir del 1)| | ||
+ | |0 */5 1-10, | ||
+ | |3/3 2/4 2 2 2|Cada 3 minutos empezando por el minuto 3 (3,6,9, etc.) de las horas 2,6,10, etc (cada 4 horas empezando en la hora 2) del día 2 de febrero y que sea martes| | ||
+ | |||
+ | Como se puede apreciar en el último ejemplo la tarea cron que estuviera asignada a ese renglón con esos datos, solo se ejecutaría si se cumple con los 5 campos (AND). Es decir, para que la tarea se ejecute tiene que ser un martes 2 de febrero a las 02:03. Siempre es un AND booleano que solo resulta verdadero si los 5 campos son ciertos en el minuto específico. | ||
+ | |||
+ | El caso anterior deja claro entonces que: | ||
+ | |||
+ | El programa cron se invoca cada minuto y ejecuta las tareas que sus campos se cumplan en ese preciso minuto. | ||
+ | |||
+ | Incluyendo el campo del usuario y el comando, los renglones de crontab podrían quedar entonces de la siguiente manera: | ||
+ | < | ||
+ | 0 22 * * * root / | ||
+ | 0 23 * * 5 root / | ||
+ | 0 8,20 * * * sergio mail -s " | ||
+ | </ | ||
+ | |||
+ | Las dos primeras líneas las ejecuta el usuario root y la primera ejecuta a las 10 de la noche de todos los días el script que genera un respaldo diario. La seguna ejecuta a las 11 de la noche de todos los viernes un script que genera un respaldo semana. La tercera línea la ejecuta el usuario sergio y se ejecutaría a las 8 de la mañana y 8 de la noche de todos los día y el comando es enviar un correo a la cuenta sgd@ejemplo.com con el asunto " | ||
+ | |||
+ | Siendo root, es posible entonces, modificar directamente crontab: | ||
+ | |||
+ | < | ||
+ | |||
+ | |||
+ | |||
+ | ==== Por usuario ==== | ||
+ | En el directorio / | ||
+ | |||
+ | Se tiene entonces, dos situaciones, | ||
+ | < | ||
+ | |||
+ | Con lo cual se abrira el editor por default (generalemente vi) con el archivo llamado crontab vacio y donde el usuario ingresará su tabla de tareas y que se guardará automáticamente como / | ||
+ | |||
+ | El otro caso es que el usuario edite un archivo de texto normal con las entradas de las tareas y como ejemplo lo nombre ' | ||
+ | |||
+ | < | ||
+ | $> vi mi_cron | ||
+ | # borra archivos de carpeta compartida | ||
+ | 0 20 * * * rm -f / | ||
+ | # ejecuta un script que realiza un respaldo de la carpeta documentos el primer día de cada mes | ||
+ | 0 22 1 * * / | ||
+ | # cada 5 horas de lun a vie, se asegura que los permisos sean los correctos en mi home | ||
+ | 1 *5 * * * 1-5 chmod -R 640 / | ||
+ | :wq (se guarda el archivo)</ | ||
+ | |||
+ | < | ||
+ | mi_cron | ||
+ | < | ||
+ | (se establece en / | ||
+ | |||
+ | |||
+ | Por usuario, usamos el comando crontab, el cual tiene las siguientes opciones: | ||
+ | |||
+ | * -e edita la tabla del cron | ||
+ | * -l lista las entradas | ||
+ | * -u usuario usa la tabla de otro usuario, en lugar del actual (sólo vale para root) | ||
+ | * -r borra la tabla entera | ||
+ | |||
+ | El formato de este fichero es el siguiente: | ||
+ | minutos horas dia mes diadelasemana comando | ||
+ | * minutos-> | ||
+ | * horas-> | ||
+ | * día-> | ||
+ | * mes-> | ||
+ | * día semana-> | ||
+ | * El comando o comandos a ejecutar. Si no está en el PATH hay que especificar toda su ruta | ||
+ | |||
+ | ===== Ejemplos: ===== | ||
+ | |||
+ | |Una vez cada hora|0 * * * *| | ||
+ | |Cada 20 minutos|0, | ||
+ | |Otra cada 20 minutos|*/3 * * * *| | ||
+ | |Una vez al día, a las 05:00 am|05 00 * * *| | ||
+ | |Los domingos a las 12:00|00 12 * * 7| | ||
+ | |El primero de cada mes|00 20 1 * *| | ||
+ | |lanzar script todos los días a las 7|0 7 * * * / | ||
+ | |lanzar script cada primer día del mes a las 7|0 7 1 * * / | ||
+ | |lanzar script cada Viernes a las 17:30 |30 17 * * 5 / | ||
+ | |||
+ | < | ||
+ | |||
+ | <note warning> | ||
+ | * >/ | ||
+ | * &> /dev/null | ||
+ | Despues reinicial el servicio cron < | ||
+ | |||
+ | Otra opción es editar el fichero crontab < | ||
+ | < | ||
+ | MAILTO="" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== Crontab predeterminados ===== | ||
La primera es en el directorio /etc, donde muy seguramente encontrarás los siguientes directorios: | La primera es en el directorio /etc, donde muy seguramente encontrarás los siguientes directorios: | ||
* cron.hourly | * cron.hourly | ||
Línea 67: | Línea 184: | ||
42 4 1 * * root run-parts / | 42 4 1 * * root run-parts / | ||
</ | </ | ||
- | **SHELL** es el ' | + | **SHELL** es el ' |
**PATH** contiene o indica la ruta a los directorios en los cuales cron buscará el comando a ejecutar. Este path es distinto al path global del sistema o del usuario. | **PATH** contiene o indica la ruta a los directorios en los cuales cron buscará el comando a ejecutar. Este path es distinto al path global del sistema o del usuario. | ||
Línea 73: | Línea 190: | ||
**MAIL TO** es a quien se le envía la salida del comando (si es que este tiene alguna salida). Cron enviará un correo a quien se especifique en este variable, es decir, debe ser un usuario válido del sistema o de algún otro sistema. Si no se especifica, entonces cron enviará el correo al usuario propietario del comando que se ejecuta. | **MAIL TO** es a quien se le envía la salida del comando (si es que este tiene alguna salida). Cron enviará un correo a quien se especifique en este variable, es decir, debe ser un usuario válido del sistema o de algún otro sistema. Si no se especifica, entonces cron enviará el correo al usuario propietario del comando que se ejecuta. | ||
- | **HOME** es el directorio raíz o principal del comando cron, si no se indica entonces, la raíz será la que se indique en el archivo | + | **HOME** es el directorio raíz o principal del comando cron, si no se indica entonces, la raíz será la que se indique en el archivo passwd correspondiente al usuario que ejecuta cron. |
Los comentarios se indican con # al inicio de la línea. | Los comentarios se indican con # al inicio de la línea. | ||
Línea 110: | Línea 227: | ||
< | < | ||
- | |||
- | ^Ejemplo^Descripción^ | ||
- | |59 11 * 1-3 1, | ||
- | |45 * 10-25 * 6-7|l minuto 45 de todas las horas de los días 10 al 25 de todos los meses y que el día sea sábado o domingo| | ||
- | |10,30,50 * * * 1,3,5|En el minuto 10, 30 y 50 de todas las horas de los días lunes, miércoles y viernes| | ||
- | |*/15 10-14 * * *|cada quince minutos de las 10:00a.m. a las 2:00p.m.| | ||
- | |* 12 1-10/2 2,8 *|Todos los minutos de las 12 del día, en los días 1,3,5,7 y 9 de febrero a agosto. (El incremento en el tercer campo es de 2 y comienza a partir del 1)| | ||
- | |0 */5 1-10, | ||
- | |3/3 2/4 2 2 2|Cada 3 minutos empezando por el minuto 3 (3,6,9, etc.) de las horas 2,6,10, etc (cada 4 horas empezando en la hora 2) del día 2 de febrero y que sea martes| | ||
- | |||
- | Como se puede apreciar en el último ejemplo la tarea cron que estuviera asignada a ese renglón con esos datos, solo se ejecutaría si se cumple con los 5 campos (AND). Es decir, para que la tarea se ejecute tiene que ser un martes 2 de febrero a las 02:03. Siempre es un AND booleano que solo resulta verdadero si los 5 campos son ciertos en el minuto específico. | ||
- | |||
- | El caso anterior deja claro entonces que: | ||
- | |||
- | El programa cron se invoca cada minuto y ejecuta las tareas que sus campos se cumplan en ese preciso minuto. | ||
- | |||
- | Incluyendo el campo del usuario y el comando, los renglones de crontab podrían quedar entonces de la siguiente manera: | ||
- | < | ||
- | 0 22 * * * root / | ||
- | 0 23 * * 5 root / | ||
- | 0 8,20 * * * sergio mail -s " | ||
- | </ | ||
- | |||
- | Las dos primeras líneas las ejecuta el usuario root y la primera ejecuta a las 10 de la noche de todos los días el script que genera un respaldo diario. La seguna ejecuta a las 11 de la noche de todos los viernes un script que genera un respaldo semana. La tercera línea la ejecuta el usuario sergio y se ejecutaría a las 8 de la mañana y 8 de la noche de todos los día y el comando es enviar un correo a la cuenta sgd@ejemplo.com con el asunto " | ||
- | |||
- | Siendo root, es posible entonces, modificar directamente crontab: | ||
- | |||
- | < | ||
- | |||
- | ===== Ejemplos: ===== | ||
- | |||
- | |Una vez cada hora|0 * * * *| | ||
- | |Cada 20 minutos|0, | ||
- | |Otra cada 20 minutos|*/3 * * * *| | ||
- | |Una vez al día, a las 05:00 am|05 00 * * *| | ||
- | |Los domingos a las 12:00|00 12 * * 7| | ||
- | |El primero de cada mes|00 20 1 * *| | ||
- | |lanzar script todos los días a las 7|0 7 * * * / | ||
- | |lanzar script cada primer día del mes a las 7|0 7 1 * * / | ||
- | |lanzar script cada Viernes a las 17:30 |30 17 * * 5 / | ||
- | |||
- | < | ||
- | |||
- | <note warning> | ||
- | * >/ | ||
- | * &> /dev/null | ||
- | Despues reinicial el servicio cron < | ||
- | |||
- | Otra opción es editar el fichero crontab < | ||
- | < | ||
- | MAILTO="" | ||
- | </ | ||
- | </ | ||
- | |||
- | === Por usuario === | ||
- | En el directorio / | ||
- | |||
- | Se tiene entonces, dos situaciones, | ||
- | |||
- | $> crontab -e | ||
- | |||
- | Con lo cual se abrira el editor por default (generalemente vi) con el archivo llamado crontab vacio y donde el usuario ingresará su tabla de tareas y que se guardará automáticamente como / | ||
- | |||
- | El otro caso es que el usuario edite un archivo de texto normal con las entradas de las tareas y como ejemplo lo nombre ' | ||
- | < | ||
- | $> vi mi_cron | ||
- | # borra archivos de carpeta compartida | ||
- | 0 20 * * * rm -f / | ||
- | # ejecuta un script que realiza un respaldo de la carpeta documentos el primer día de cada mes | ||
- | 0 22 1 * * / | ||
- | # cada 5 horas de lun a vie, se asegura que los permisos sean los correctos en mi home | ||
- | 1 *5 * * * 1-5 chmod -R 640 / | ||
- | :wq (se guarda el archivo)</ | ||
- | < | ||
- | mi_cron | ||
- | < | ||
- | (se establece en / | ||
- | |||
- | |||
- | Por usuario, usamos el comando crontab, el cual tiene las siguientes opciones: | ||
- | |||
- | * -e edita la tabla del cron | ||
- | * -l lista las entradas | ||
- | * -u usuario usa la tabla de otro usuario, en lugar del actual (sólo vale para root) | ||
- | * -r borra la tabla entera | ||
- | |||
- | El formato de este fichero es el siguiente: | ||
- | minutos horas dia mes diadelasemana comando | ||
- | * minutos-> | ||
- | * horas-> | ||
- | * día-> | ||
- | * mes-> | ||
- | * día semana-> | ||
- | * El comando o comandos a ejecutar. Si no está en el PATH hay que especificar toda su ruta | ||
- | |||
- | |||
- | |||
- | |||
==== Controlando el acceso a cron ==== | ==== Controlando el acceso a cron ==== | ||
Línea 242: | Línea 261: | ||
La opción -e se usa para crear y editar el crontab activo mediante el editor especificado en las variables de entorno EDITOR. El crontab modificado se instala automáticamente al salir del editor guardando los cambios. | La opción -e se usa para crear y editar el crontab activo mediante el editor especificado en las variables de entorno EDITOR. El crontab modificado se instala automáticamente al salir del editor guardando los cambios. | ||
- | |||
Línea 254: | Línea 272: | ||
* http:// | * http:// | ||
* http:// | * http:// | ||
+ | * http:// | ||
+ |