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 previa | ||
| linux:cron [2010/11/18 13:46] – lc | linux:cron [2023/01/18 14:10] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ====== Cron ====== | + | {{tag> 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 24: | ||
| 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 185: | ||
| 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 191: | ||
| **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 228: | ||
| < | < | ||
| - | |||
| - | ^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 262: | ||
| 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 273: | ||
| * http:// | * http:// | ||
| * http:// | * http:// | ||
| + | * http:// | ||
| + | |||