logo sinuh
 

Inicio arrow Conocimiento arrow Curso GNU/Linux desde cero arrow Entrega 39. Programación de tareas (II).
Entrega 39. Programación de tareas (II). Imprimir
Por Luis García Galván   
sábado, 03 mar 2007 10:37

CURSO DESDE 0 DE GNU/LINUX. Versión 2.


Entrega 39. Programación de tareas (II).


        % drink bottle: cannot open
opener: not found
 

Continuamos.


Continuamos con lo visto en la entrega anterior, es muy probable que se nos quede corto y que necesitemos algo mucho más potente y versátil, para eso tenemos una herramienta muy útil llamada “cron”, y en esta entrega nos vamos a dedicar a usarla.


¿Qué es cron?


Cron es un demonio para ejecutar tareas programadas, que será de gran ayuda tanto para administradores de sistemas como para usuarios comunes.


Normalmente, este demonio se encuentra ya instalado y arrancado, en caso contrario ya sabéis cómo actuar porque el arranque y parada e instalación ya lo hemos visto.


El uso más simple de cron


Para los que sean mas cómodos o que simplemente no necesiten más que algo que se ejecute cada hora, todos los días, todas las semanas o meses, están de suerte porque al menos en Debian existen cuatro directorios que cumplen con lo que necesitamos, y son:


  • /etc/cron.hourly - Para cada hora

  • /etc/cron.daily - Para cada día

  • /etc/cron.weekly - Para cada Semana

  • /etc/cron.monthly - Para cada Mes


Con esto sólo nos basta poner un ejecutable (o enlace a un ejecutable) o script para que se ejecute automáticamente, aunque este es el método más sencillo no permite en absoluto la personalización.


Si estáis en otros sistemas puede que no tengáis esto, pero es fácil de hacer, lo primero es crear los directorios, con los permisos del listado:


drwxr-xr-x 2 root root 4096 2007-01-28 09:31 cron.daily

drwxr-xr-x 2 root root 4096 2007-01-28 09:30 cron.hourly

drwxr-xr-x 2 root root 4096 2007-01-28 09:30 cron.monthly

drwxr-xr-x 2 root root 4096 2007-02-08 22:19 cron.weekly


Y lo siguiente, añadir estas líneas al fichero '/etc/crontab', que veremos más adelante para qué sirve:


17 * * * * root cd / && run-parts --report /etc/cron.hourly

25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )

52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )


Sólo necesitaremos con lo anterior tener instalado 'anacron'.

Yo quiero más, mucho más


Aun así, el no poder personalizar aún más la programación de tareas puede ser un gran inconveniente, por lo que necesitamos seguir aprendiendo y utilizar 'cron' de la mejor forma posible.


Para ello, debemos definir las tareas dentro de archivos llamados 'crontab', y para ello hay dos formas: la genérica, donde sólo puede escribir el root que es el fichero antes nombrado '/etc/crontab', y la segunda son los ficheros 'crontab' por usuario dentro del directorio '/var/spool/cron/crontabs/' con el nombre del usuario, como por ejemplo '/var/spool/cron/crontabs/matados2k' y el grupo debe ser 'crontab':


imperio:/var/spool/cron/crontabs# ls -l

total 4

-rw------- 1 matados2k crontab 208 2007-02-20 13:21 matados2k

imperio:/var/spool/cron/crontabs#


¿Cómo rellenar estos archivos?


Estos archivos tienen dos cosas, variables y tareas. Las variables son cuatro y pueden o no aparecer, yo de hecho no las voy a usar, pero son estas:


  • SHELL - Indica el intérprete de comandos a usar.

  • PATH - Indica el PATH a usar que ya vimos en otras entregas .

  • MAILTO - Indica el usuario al cual notificar las salidas generadas por las tareas.

  • HOME - Indica el directorio personal del usuario


Un ejemplo de configuración de estas variables puede ser:


SHELL=/bin/bash

PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

MAILTO=matados2k

HOME=/home/matados2k


Y las tareas, que es lo que tiene miga y lo que más nos interesa. El formato es el siguiente:


minuto hora día_del_mes mes día comando


Bastante auto explicativo, ¿verdad? Veamos qué valores valen para cada campo:


Campo

Valores permitidos

minuto

hora

día_del_mes

mes

día

0-59

0-23

1-31

1-12 (o el nombre en inglés)

0-7 (o el nombre en inglés, 0 ó 7 es Domingo)


Si os fijáis tiene mucho sentido que tanto 0 como 7 sea domingo, ya que para los anglosajones el primer día de la semana es domingo y usarán del 0 al 6, y nosotros usaremos del 1 al 7 y todo funcionará a las mil maravillas.


Para decir que se ejecute para todos sus posibles valores en cada campo de la tabla usaremos '*', para pasarle una lista de valores los separaremos por comas, por ejemplo lunes, miércoles y jueves sería '1,3,5'. Para un rango se utiliza un guión, por ejemplo de lunes a viernes '1-5', y por último periodos para los cuales usaremos '/', por ejemplo cada 15 minutos '*/15'.


Como ejemplo vamos a definir una tarea, que será para el comando 'ls -l /home/matados2k > /home/matados2k/lista.txt en los siguientes tiempos:


A las 8 de la mañana durante todos los días:


0 8 * * * ls -l /home/matados2k > /home/matados2k/lista.txt


Cada 15 minutos los domingos:


*/15 * * * 7 ls -l /home/matados2k > /home/matados2k/lista.txt



Cada 2 horas los lunes y miércoles:


* */2 * * 1,3 ls -l /home/matados2k > /home/matados2k/lista.txt



Los días 1 de cada mes:


0 0 1 * * ls -l /home/matados2k > /home/matados2k/lista.txt



De 12 de la noche a 8 de la mañana cada 30 minutos:


0/30 0-8 * * * ls -l /home/matados2k > /home/matados2k/lista.txt


Si os paráis a pensar no es nada difícil crear un fichero válido para programar tareas, y las posibles combinaciones para conseguir una programación de tareas son geniales ¿Se os ocurre alguna combinación que no sea posible? (Y no vale empezar con cosas raras como ciclos lunares).


Y otra vez cuestión de permisos.


El superusuario (root) siempre puede utilizar estos comandos. Para otros usuarios, los permisos para utilizarlos están determinados en los ficheros '/etc/cron.allow' y '/etc/cron.deny'.


Si el fichero '/etc/cron.allow' existe, sólo los usuarios cuyos nombres estén mencionados aquí tienen permiso para utilizar 'cron'. Si '/etc/cron.allow' no existe, se chequea '/etc/cron.deny' y entonces todos los usuarios cuyos nombres no estén mencionados allí tienen permiso para utilizar 'cron'. Si ninguno de los ficheros existe, sólo el superusuario puede utilizar 'cron'. Un '/etc/cron.deny' vacío significa que todo usuario puede utilizar estos comandos, esta es la configuración por defecto (aunque esto puede cambiar en otros sistemas).


Como lo tengo yo configurado:


imperio:/home/matados2k# cat /etc/cron.allow

cat: /etc/cron.allow: No existe el fichero o el directorio

imperio:/home/matados2k# cat /etc/cron.deny

cat: /etc/cron.deny: No existe el fichero o el directorio

imperio:/home/matados2k#



Despedida.


Pues con esto terminamos por esta semana y os espero la siguiente con las alternativas gráficas para configurar la programación de tareas, que por debajo por supuesto usan 'cron'. Y mira por donde, será la entrega 40. Un buen número para quizás preparar un recopilatorio de entregas muy completito en pdf.


Agradecimientos:

· Revisión del documento: karuchi (Carolina García).


Página oficial y dominio de mi propiedad http://matados2k.es

Matados'2k Usuario y moderador de foro.noticias3d.com

Matados'2k Usuario y moderador de www.sinuh.org

,

matados2k (arroba) gmail (punto) com


Este documento está sometido a la licencia de creative commons en su variante “Reconocimiento-NoComercial-SinObraDerivada 2.1 España” . Es de agradecer que se comunique al autor el uso de este documento en otro medio y se debe incluir de forma obligatoria este recuadro y los agradecimientos.


 

Comentario[s]

Sólo los usuarios registrados pueden escribir comentarios.
Por favor valídate o regístrate.

Powered by AkoComment 2.0!




© 2002-2005 SINUH - Comunidad GNU/Linux de Extremadura
Este portal utiliza Mambo
DHTML / JavaScript Tree by TwinHelix Designs

Para contactar con nosotros envía un correo a
info
Licencia Creative Commons
Los contenidos de este portal, salvo indicación en contra, están sujetos a una licencia de Creative Commons.

Los logotipos y marcas que aparecen son propiedad de sus respectivos dueños.

Las opiniones y declaraciones de las personas reflejadas en los foros y comentarios son propiedad y responsabilidad de sus autores, no identificando la opinión de SINUH y excluyendo de cualquier responsabilidad a esta asociación.
Ahora 805 visitantes
Advertisement