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:41] – 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 111: | Línea 229: | ||
< | < | ||
- | ^Ejemplo^Descripción^ | + | ==== Controlando |
- | |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: | + | |
- | |* 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 | + | Cron permite controlar |
- | El programa | + | * /etc/cron.allow |
+ | * / | ||
- | Incluyendo el campo del usuario | + | Para impedir que un usuario |
- | < | + | |
- | 0 22 * * * root /usr/respaldodiario.sh | + | |
- | 0 23 * * 5 root /usr/respaldosemanal.sh | + | |
- | 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 | + | #> echo ALL >>/ |
+ | o para agregar | ||
+ | #> echo juan >>/ | ||
- | Siendo root, es posible | + | Si no existe el archivo cron.allow ni el archivo cron.deny, en teoría el uso de cron esta entonces |
- | < | + | Los ficheros de configuración de los distintos usuarios se almacenan en el directorio / |
+ | Cada usuario puede tener y gestionar su propio fichero de configuración para cron. Bueno, hay dos ficheros, / | ||
+ | Los ficheros de configuración de crontab no están diseñados para editarse directamente por el usuario; aunque son ficheros de texto estos ficheros se modifican mediante la orden crontab. La orden crontab se puede utilizar como: | ||
- | === Por usuario | + | crontab [ -u usuario |
- | En el directorio / | + | crontab [ -u usuario |
+ | | ||
- | Se tiene entonces, dos situaciones, | + | La opción -u se utiliza para indicar |
- | $> crontab | + | La opción |
- | Con lo cual se abrira | + | La opción -r elimina |
- | El otro caso es que el usuario edite un archivo de texto normal con las entradas de las tareas | + | La opción -e se usa para crear y editar |
- | < | + | |
- | $> vi mi_cron | + | |
- | # borra archivos | + | |
- | 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 | ||
- | |||
- | === 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/ | ||
- | |||
- | ===== 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="" | ||
- | </ | ||
- | </ | ||
==== GUIS para cron ==== | ==== GUIS para cron ==== | ||
Línea 235: | Línea 273: | ||
* http:// | * http:// | ||
* http:// | * http:// | ||
+ | * http:// | ||
+ |