|
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.
|
Sólo los usuarios registrados pueden escribir comentarios. Por favor valídate o regístrate. Powered by AkoComment 2.0! |