meta data de esta página
  •  

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
linux:cron [2010/11/18 13:50] lclinux:cron [2023/01/18 14:10] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
 +{{tag> cron }}
 ===== 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 24: Línea 24:
  
 Hay varias formas de usar cron Hay varias formas de usar cron
-==== General ===== 
-La primera es en el directorio /etc, donde muy seguramente encontrarás los siguientes directorios: 
-     * cron.hourly 
-     * cron.daily 
-     * cron.weekly 
-     * cron.monthly 
-Si se coloca un archivo tipo script en cualquiera de estos directorios, entonces el script se ejecutará cada hora, cada día, cada semana o cada mes, dependiendo del directorio. 
- 
-Si se coloca un archivo tipo script en cualquiera de estos directorios, entonces el script se ejecutará cada hora, cada día, cada semana o cada mes, dependiendo del directorio. 
- 
-Para que el archivo pueda ser ejecutado tiene que ser algo similar a lo siguiente: 
-<code> 
- #!/bin/sh 
-#script que genera un respaldo 
-cd /usr/documentos 
-tar czf * respaldo 
-cp respaldo /otra_directorio/. 
-</code> 
-<note>Nótese que la primera línea empieza con #!, que indica que se trata de un script shell de bash, las demás líneas son los comandos que deseamos ejecute el script. Este script podría nombrarse por ejemplo respaldo.sh y también debemos cambiarle los permisos correspondientes para que pueda ser ejecutado, por ejemplo: 
-<code> 
-#> chmod 700 respaldo.sh 
-#> ls -l respaldo.sh 
-</code> 
--rwx------ 1 root root 0 Jul  20 09:30 respaldo.sh 
- 
-La "x" en el grupo de permisos del propietario (rwx) indica que puede ser ejecutado. 
-</note> 
-Si este script lo dejamos en cron.hourly, entonces se ejecutará cada hora con un minuto de todos los días. 
- 
-Otra forma es editar como root el fichero /etc/crontab 
- 
-<code> 
-#> cat /etc/crontab 
-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 
-</code> 
-**SHELL** es el 'shell' bajo el cual se ejecuta el cron. Si no se especifica, se tomará por defecto el indicado en la línea /etc/passwd correspondiente al usuario que este ejecutando cron. 
- 
-**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. 
- 
-**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 /etc/passwd correspondiente al usuario que ejecuta cron. 
- 
-Los comentarios se indican con # al inicio de la línea. 
- 
-Después de lo anterior vienen las líneas que ejecutan las tareas programadas propiamente. No hay límites de cuantas tareas pueda haber, una por renglón. Los campos (son 7) que forman estas líneas están formados de la siguiente manera: 
- 
-<code>Minuto  Hora  DiaDelMes  Mes  DiaDeLaSemana  Usuario  Comando</code> 
- 
-^Campo^Descripción^ 
-|Minuto|Controla el minuto de la hora en que el comando será ejecutado, este valor debe de estar entre 0 y 59.| 
-|Hora|Controla la hora en que el comando será ejecutado, se especifica en un formato de 24 horas, los valores deben estar entre 0 y 23, 0 es medianoche.| 
-|Día del Mes|Día del mes en que se quiere ejecutar el comando. Por ejemplo se indicaría 20, para ejecutar el comando el día 20 del mes.| 
-|Mes|Mes en que el comando se ejecutará, puede ser indicado numéricamente (1-12), o por el nombre del mes en inglés, solo las tres primeras letras.| 
-|Día de la semana|Día en la semana en que se ejecutará el comando, puede ser numérico (0-7) o por el nombre del día en inglés, solo las tres primeras letras. (0 y 7 = domingo)| 
-|Usuario|Usuario que ejecuta el comando.| 
-|Comando|Comando, script o programa que se desea ejecutar. Este campo puede contener múltiples palabras y espacios.| 
- 
-El * es lo mismo que decir todo 
- 
-^Ejemplo^Descripción^ 
-|01 * * * *|Se ejecuta al minuto 1 de cada hora de todos los días| 
-|15 8 * * *|A las 8:15 a.m. de cada día| 
-|15 20 * * *|A las 8:15 p.m. de cada día| 
-|00 5 * * 0|A las 5 a.m. todos los domingos| 
-|* 5 * * Sun|Cada minuto de 5:00a.m. a 5:59a.m. todos los domingos| 
-|45 19 1 * *|A las 7:45 p.m. del primero de cada mes| 
-|01 * 20 7 *|Al minuto 1 de cada hora del 20 de julio| 
-|10 1 * 12 1|A la 1:10 a.m. todos los lunes de diciembre| 
-|00 12 16 * Wen|Al mediodía de los días 16 de cada mes y que sea Miércoles| 
-|30 9 20 7 4|A las 9:30 a.m. del dia 20 de julio y que sea jueves| 
-|30 9 20 7 *|A las 9:30 a.m. del dia 20 de julio sin importar el día de la semana| 
-|20 * * * 6|Al minuto 20 de cada hora de los sábados| 
-|20 * * 1 6|Al minuto 20 de cada hora de los sábados de enero| 
- 
-También es posible especificar listas en los campos. Las listas pueden estar en la forma de 1,2,3,4 o en la forma de 1-4 que sería lo mismo. Cron, de igual manera soporta incrementos en las listas, que se indican de la siguiente manera:  
- 
-<code>Valor o lista/incremento</code> 
- 
  
 ==== Por el Sistema ==== ==== Por el Sistema ====
Línea 130: Línea 42:
   * Una lista de números separados por comas    * Una lista de números separados por comas 
   * Un rango, declarado como dos números separados por un guión    * Un rango, declarado como dos números separados por un guión 
-  * Cada cierto tiempo, con una barra (valor/incremento) +  * Cada cierto tiempo, con una barra (valor/incremento) 
 + 
 ^Ejemplo^Descripción^ ^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|+|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| |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| |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|
Línea 165: Línea 78:
  
 Se tiene entonces, dos situaciones, generar directamente el archivo crontab con el comando: Se tiene entonces, dos situaciones, generar directamente el archivo crontab con el comando:
- +<code>$> crontab -e</code>
-$> 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 /var/spool/cron/usuario. 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 /var/spool/cron/usuario.
  
-El otro caso es que el usuario edite un archivo de texto normal con las entradas de las tareas y como ejemplo lo nombre 'mi_cron', después el comando $> crontab mi_cron se encargará de establecerlo como su archivo cron del usuario en /var/spool/cron/usuario: +El otro caso es que el usuario edite un archivo de texto normal con las entradas de las tareas y como ejemplo lo nombre 'mi_cron', después el comando $> crontab mi_cron se encargará de establecerlo como su archivo cron del usuario en /var/spool/cron/usuario 
-<code>+ 
 +<file>
 $> vi mi_cron $> vi mi_cron
 # borra archivos de carpeta compartida # borra archivos de carpeta compartida
Línea 179: Línea 92:
 # cada 5 horas de lun a vie, se asegura que los permisos sean los correctos en mi home # 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 /home/sergio/* 1 *5 * * * 1-5 chmod -R 640 /home/sergio/*
-:wq (se guarda el archivo)</code>+:wq (se guarda el archivo)</file> 
 <code>$> ls </code> <code>$> ls </code>
 mi_cron mi_cron
Línea 202: Línea 116:
   * El comando o comandos a ejecutar. Si no está en el PATH hay que especificar toda su ruta   * 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,20,40 * * * *|
 +|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 * * *  /path/script.sh|
 +|lanzar script cada primer día del mes a las 7|0 7  1 * * /path/script.sh|
 +|lanzar script cada Viernes a las 17:30 |30 17  * * 5 /path/script.sh|
  
 +<note>Si ponemos un * se ejecutarán una vez por hora en el caso de las horas, y una vez por minuto en el caso de los minutos</note>
  
 +<note warning>Hay que tener cuidado con los mensajes que envía el cron en caso de tener deshabilitado el sendmail. Para evitar que los mensajes se queden en /var/spool/clientmqueue hay que ejecutar <code> crontab -e </code> y añadir al final de la línea de cada trabajo una de las siguientes opciones:
 +  * >/dev/null 2>&1
 +  * &> /dev/null
 +Despues reinicial el servicio cron <code>/etc/init.d/crond restart</code>
 +
 +Otra opción es editar el fichero crontab <code>nano /etc/crontab</code> y modificar o añadir al principio la línea 
 +<file>
 +MAILTO=""
 +</file>
 +</note>
 +
 +==== Crontab predeterminados =====
 +La primera es en el directorio /etc, donde muy seguramente encontrarás los siguientes directorios:
 +     * cron.hourly
 +     * cron.daily
 +     * cron.weekly
 +     * cron.monthly
 +Si se coloca un archivo tipo script en cualquiera de estos directorios, entonces el script se ejecutará cada hora, cada día, cada semana o cada mes, dependiendo del directorio.
 +
 +Si se coloca un archivo tipo script en cualquiera de estos directorios, entonces el script se ejecutará cada hora, cada día, cada semana o cada mes, dependiendo del directorio.
 +
 +Para que el archivo pueda ser ejecutado tiene que ser algo similar a lo siguiente:
 +<code>
 + #!/bin/sh
 +#script que genera un respaldo
 +cd /usr/documentos
 +tar czf * respaldo
 +cp respaldo /otra_directorio/.
 +</code>
 +<note>Nótese que la primera línea empieza con #!, que indica que se trata de un script shell de bash, las demás líneas son los comandos que deseamos ejecute el script. Este script podría nombrarse por ejemplo respaldo.sh y también debemos cambiarle los permisos correspondientes para que pueda ser ejecutado, por ejemplo:
 +<code>
 +#> chmod 700 respaldo.sh
 +#> ls -l respaldo.sh
 +</code>
 +-rwx------ 1 root root 0 Jul  20 09:30 respaldo.sh
 +
 +La "x" en el grupo de permisos del propietario (rwx) indica que puede ser ejecutado.
 +</note>
 +Si este script lo dejamos en cron.hourly, entonces se ejecutará cada hora con un minuto de todos los días.
 +
 +Otra forma es editar como root el fichero /etc/crontab
 +
 +<code>
 +#> cat /etc/crontab
 +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
 +</code>
 +**SHELL** es el 'shell' bajo el cual se ejecuta el cron. Si no se especifica, se tomará por defecto el indicado en la línea passwd dentro de etc, correspondiente al usuario que este ejecutando cron.
 +
 +**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.
 +
 +**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 passwd correspondiente al usuario que ejecuta cron.
 +
 +Los comentarios se indican con # al inicio de la línea.
 +
 +Después de lo anterior vienen las líneas que ejecutan las tareas programadas propiamente. No hay límites de cuantas tareas pueda haber, una por renglón. Los campos (son 7) que forman estas líneas están formados de la siguiente manera:
 +
 +<code>Minuto  Hora  DiaDelMes  Mes  DiaDeLaSemana  Usuario  Comando</code>
 +
 +^Campo^Descripción^
 +|Minuto|Controla el minuto de la hora en que el comando será ejecutado, este valor debe de estar entre 0 y 59.|
 +|Hora|Controla la hora en que el comando será ejecutado, se especifica en un formato de 24 horas, los valores deben estar entre 0 y 23, 0 es medianoche.|
 +|Día del Mes|Día del mes en que se quiere ejecutar el comando. Por ejemplo se indicaría 20, para ejecutar el comando el día 20 del mes.|
 +|Mes|Mes en que el comando se ejecutará, puede ser indicado numéricamente (1-12), o por el nombre del mes en inglés, solo las tres primeras letras.|
 +|Día de la semana|Día en la semana en que se ejecutará el comando, puede ser numérico (0-7) o por el nombre del día en inglés, solo las tres primeras letras. (0 y 7 = domingo)|
 +|Usuario|Usuario que ejecuta el comando.|
 +|Comando|Comando, script o programa que se desea ejecutar. Este campo puede contener múltiples palabras y espacios.|
 +
 +El * es lo mismo que decir todo
 +
 +^Ejemplo^Descripción^
 +|01 * * * *|Se ejecuta al minuto 1 de cada hora de todos los días|
 +|15 8 * * *|A las 8:15 a.m. de cada día|
 +|15 20 * * *|A las 8:15 p.m. de cada día|
 +|00 5 * * 0|A las 5 a.m. todos los domingos|
 +|* 5 * * Sun|Cada minuto de 5:00a.m. a 5:59a.m. todos los domingos|
 +|45 19 1 * *|A las 7:45 p.m. del primero de cada mes|
 +|01 * 20 7 *|Al minuto 1 de cada hora del 20 de julio|
 +|10 1 * 12 1|A la 1:10 a.m. todos los lunes de diciembre|
 +|00 12 16 * Wen|Al mediodía de los días 16 de cada mes y que sea Miércoles|
 +|30 9 20 7 4|A las 9:30 a.m. del dia 20 de julio y que sea jueves|
 +|30 9 20 7 *|A las 9:30 a.m. del dia 20 de julio sin importar el día de la semana|
 +|20 * * * 6|Al minuto 20 de cada hora de los sábados|
 +|20 * * 1 6|Al minuto 20 de cada hora de los sábados de enero|
 +
 +También es posible especificar listas en los campos. Las listas pueden estar en la forma de 1,2,3,4 o en la forma de 1-4 que sería lo mismo. Cron, de igual manera soporta incrementos en las listas, que se indican de la siguiente manera: 
 +
 +<code>Valor o lista/incremento</code>
  
 ==== Controlando el acceso a cron ==== ==== Controlando el acceso a cron ====
Línea 250: Línea 273:
   * http://www.linuca.org/body.phtml?nIdNoticia=256   * http://www.linuca.org/body.phtml?nIdNoticia=256
   * http://www.mexicoextremo.com.mx/content/view/19/62/   * http://www.mexicoextremo.com.mx/content/view/19/62/
 +  * http://www.linuxtotal.com.mx/index.php?cont=info_admon_006
 +