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:44] lclinux: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 /etc/cron.d. Si se cambia estos ficheros hay que reiniciar el cron.  
 + 
 +Cada tarea se añade indicando 5 campos que indican el período de ejecución, en las del sistema (/etc/cron.d), un campo más para el usuario con el que se ejecutará  
 + 
 +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/incremento) 
 +  
 +^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,15,20-23 * 3|Cada 5 horas de los días 1 al 10, el día 15 y del día 20 al 23 de cada mes y que el día sea miércoles| 
 +|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: 
 +<code> 
 +0 22 * * * root /usr/respaldodiario.sh 
 +0 23 * * 5 root /usr/respaldosemanal.sh 
 +0 8,20 * * * sergio mail -s "sistema funcionando" sgd@ejemplo.com 
 +</code> 
 + 
 +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 "sistema funcionando", una manera de que un administrador este enterado de que un sistema remoto esta activo en las horas indicadas, sino recibe un correo en esas horas, algo anda mal. 
 + 
 +Siendo root, es posible entonces, modificar directamente crontab: 
 + 
 +<code>#> vi /etc/crontab</code> 
 + 
 + 
 + 
 +==== Por usuario ====  
 +En el directorio /var/spool/cron (puede variar según la distribución), se genera un archivo cron para cada usuario, este archivo aunque es de texto, no debe editarse directamente. 
 + 
 +Se tiene entonces, dos situaciones, generar directamente el archivo crontab con el comando: 
 +<code>$> crontab -e</code> 
 + 
 +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 
 + 
 +<file> 
 +$> vi mi_cron 
 +# borra archivos de carpeta compartida 
 +0 20 * * * rm -f /home/sergio/compartidos/
 +# ejecuta un script que realiza un respaldo de la carpeta documentos el primer día de cada mes 
 +0 22 1 * * /home/sergio/respaldomensual.sh 
 +# 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/
 +:wq (se guarda el archivo)</file> 
 + 
 +<code>$> ls </code> 
 +mi_cron 
 +<code>$> crontab mi_cron</code> 
 +(se establece en /var/spool/cron/usuario) 
 + 
 + 
 +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->entre 0 y 59 
 +  * horas->Entre 0 y 23 
 +  * día->Entre 1 y 31 
 +  * mes->Entre 1 y 12 
 +  * día semana->Entre 0 y 6. 0 es Domingo, 1 Lunes, ... 6 Sábado 
 +  * 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>&
 +  * &> /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: 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 /etc/cron.monthly 42 4 1 * * root run-parts /etc/cron.monthly
 </code> </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.+**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. **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 /etc/passwd correspondiente al usuario que ejecuta cron.+**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:
  
 <code>Valor o lista/incremento</code> <code>Valor o lista/incremento</code>
- 
-^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,15,20-23 * 3|Cada 5 horas de los días 1 al 10, el día 15 y del día 20 al 23 de cada mes y que el día sea miércoles| 
-|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: 
-<code> 
-0 22 * * * root /usr/respaldodiario.sh 
-0 23 * * 5 root /usr/respaldosemanal.sh 
-0 8,20 * * * sergio mail -s "sistema funcionando" sgd@ejemplo.com 
-</code> 
- 
-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 "sistema funcionando", una manera de que un administrador este enterado de que un sistema remoto esta activo en las horas indicadas, sino recibe un correo en esas horas, algo anda mal. 
- 
-Siendo root, es posible entonces, modificar directamente crontab: 
- 
-<code>#> vi /etc/crontab</code> 
- 
- 
- 
-=== Por usuario ===  
-En el directorio /var/spool/cron (puede variar según la distribución), se genera un archivo cron para cada usuario, este archivo aunque es de texto, no debe editarse directamente. 
- 
-Se tiene entonces, dos situaciones, generar directamente el archivo crontab con el comando: 
- 
-$> 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. 
- 
-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> 
-$> vi mi_cron 
-# borra archivos de carpeta compartida 
-0 20 * * * rm -f /home/sergio/compartidos/* 
-# ejecuta un script que realiza un respaldo de la carpeta documentos el primer día de cada mes 
-0 22 1 * * /home/sergio/respaldomensual.sh 
-# 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/* 
-:wq (se guarda el archivo)</code> 
-<code>$> ls </code> 
-mi_cron 
-<code>$> crontab mi_cron</code> 
-(se establece en /var/spool/cron/usuario) 
- 
- 
-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->entre 0 y 59 
-  * horas->Entre 0 y 23 
-  * día->Entre 1 y 31 
-  * mes->Entre 1 y 12 
-  * día semana->Entre 0 y 6. 0 es Domingo, 1 Lunes, ... 6 Sábado 
-  * 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 /etc/cron.d. Si se cambia estos ficheros hay que reiniciar el cron.  
- 
-Cada tarea se añade indicando 5 campos que indican el período de ejecución, en las del sistema (/etc/cron.d), un campo más para el usuario con el que se ejecutará  
- 
-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/incremento)  
- 
- 
  
 ==== Controlando el acceso a cron ==== ==== Controlando el acceso a cron ====
Línea 236: 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 248: 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
 +