logo sinuh
 

Inicio arrow Conocimiento arrow Curso GNU/Linux desde cero arrow Entrega 38.Programación de tareas (I).
Entrega 38.Programación de tareas (I). Imprimir
Por Luis García Galván   
sábado, 03 mar 2007 10:37
 CURSO DESDE 0 DE GNU/LINUX. Versión 2.


Entrega 38.Programación de tareas (I).


		% ^How did the sex change operation go?
Bad substitute.

Comenzamos.


Bien, ya estamos de nuevo, ya comenté que comenzaría con Shell Script pero creo que la programación de tareas puede ser interesante verla antes, ya que le dará mucha potencia a los scripts que aprendamos a hacer en la próxima serie de entregas.


A lo largo de estas entregas vamos a aprender a usar varias herramientas para programar tareas, aunque en el fondo sean sólo dos, y de ellas luego dos interfaces gráficas, y como siempre una para KDE y otra para GNOME.


Sólo por una vez.


Se nos puede dar el caso de querer ejecutar una tarea una sola vez pero en un momento determinado. Para realizar esto usamos el siguiente comando:


at [opciones] TIME


Este comando ejecuta comandos a una determinada hora, donde time es el tiempo en el formato “HH:MM” donde HH es hora y MM minutos. Vamos a ejecutarlo:


matados2k@imperio:~/curso$ at

Garbled time

matados2k@imperio:~/curso$ at 11:00

warning: commands will be executed using /bin/sh

at>


Como vemos, es necesario indicar siempre el tiempo y se nos queda a la espera de que le introduzcamos los comandos. Bien, le metemos uno sencillo y para salir pulsamos 'ctrl+d':


at> ls > ls.txt

at> (aquí pulso Ctrl+d) <EOT>

job 5 at Thu Feb 15 11:00:00 2007

matados2k@imperio:~/curso$


Como no se nos muestra nada una vez se ejecuta el comando, una vez pasado el tiempo, vamos a comprobar el resultado:


matados2k@imperio:~/curso$ ls ls.txt

ls.txt

matados2k@imperio:~/curso$ cat ls.txt

aMule-2.0.0rc4a-1.i686-FC.rpm

aMule-2.0.0-rc5_fc1.i686.rpm

...

wxGTK-devel-2.4.2-1.i386.rpm

matados2k@imperio:~/curso$


Si lo que quieres es indicarle directamente un script y olvidarte de pulsar 'ctrl+d' puedes usar la opción '-f ' y listarle el comando que necesites:


matados2k@imperio:~/curso$ cd miscomandos/

matados2k@imperio:~/curso/miscomandos$ ls

hola lentejas ls

matados2k@imperio:~/curso/miscomandos$ echo ls -l \> lista.txt > listar

matados2k@imperio:~/curso/miscomandos$ chmod +x listar

matados2k@imperio:~/curso/miscomandos$ cat listar

ls -l > lista.txt

matados2k@imperio:~/curso/miscomandos$ at -f listar 11:14

warning: commands will be executed using /bin/sh

job 8 at Thu Feb 15 11:14:00 2007

matados2k@imperio:~/curso/miscomandos$ cat lista.txt

total 16

-rwxr-xr-x 1 matados2k matados2k 19 2007-01-27 16:48 hola

-rwxr-xr-x 1 matados2k matados2k 45 2007-01-14 19:40 lentejas

-rwxr-xr-x 1 matados2k matados2k 18 2007-02-15 11:13 listar

-rw-r--r-- 1 matados2k matados2k 0 2007-02-15 11:14 lista.txt

-rwxr-xr-x 1 matados2k matados2k 35 2007-01-27 16:52 ls

matados2k@imperio:~/curso/miscomandos$


Expliquemos paso por paso: primero creo un script redireccionando la salida del comando echo a un fichero, donde uso '\' para escapar '>' y no lo interprete como redirección. Le doy permisos de ejecución, lo programo y compruebo su correcta ejecución.


¡Qué memoria la mía!.


Mira que ando mal de la memoria, programo las tareas con 'at' y luego se me olvida qué era lo que mandé y a qué hora se ejecutaba, necesito el comando:


atq


Este comando nos lo recuerda fácilmente:


matados2k@imperio:~/curso/miscomandos$ at -f listar 15:00

warning: commands will be executed using /bin/sh

job 9 at Thu Feb 15 15:00:00 2007

matados2k@imperio:~/curso/miscomandos$ at -f listar 18:00

warning: commands will be executed using /bin/sh

job 10 at Thu Feb 15 18:00:00 2007

matados2k@imperio:~/curso/miscomandos$ atq

9 Thu Feb 15 15:00:00 2007 a matados2k

10 Thu Feb 15 18:00:00 2007 a matados2k

matados2k@imperio:~/curso/miscomandos$


Como veis nos da todo lo que necesitamos , el número de la tarea (que nos va a ser útil), la fecha de la futura ejecución y el usuario.


Quiero desprogramar.


Un buen ejemplo para querer eliminar una tarea programada con 'at' puede ser que hayas sido tan gracioso de programar 'rm -r /' con permisos de root y claro, luego puede que no te siente bien cargarte toda tu información. Menos mal que existe:


atrm Números_de_tareas


El número de tarea nos lo da siempre el comando 'at' en las líneas como esta: 'job 10 at Thu Feb 15 18:00:00 2007' o bien lo sacamos como hemos dicho antes con 'atq'. Como ya tengo los números de tarea, voy a eliminar las tareas pendientes de ejecutarse:


matados2k@imperio:~/curso/miscomandos$ atq

9 Thu Feb 15 15:00:00 2007 a matados2k

10 Thu Feb 15 18:00:00 2007 a matados2k

matados2k@imperio:~/curso/miscomandos$ atrm 9 10

matados2k@imperio:~/curso/miscomandos$ atq

matados2k@imperio:~/curso/miscomandos$


Soy un cotilla.


Como puede que tengamos una máquina con varios usuarios, puede que alguno de ellos use 'at' y quieras saber qué es lo que va a ejecutar, y para cotillear cuál es el entorno del usuario y qué ejecutará, vamos a usar la opción '-c' seguido del número de tarea y sin usar TIME para que nos lo chive:


matados2k@imperio:~/curso/miscomandos$ at -f listar 15:00

warning: commands will be executed using /bin/sh

job 11 at Thu Feb 15 15:00:00 2007

matados2k@imperio:~/curso/miscomandos$ atq

11 Thu Feb 15 15:00:00 2007 a matados2k

matados2k@imperio:~/curso/miscomandos$ at -c 11

#!/bin/sh

# atrun uid=1000 gid=1000

# mail matados2k 0

umask 22

KDE_MULTIHEAD=false; export KDE_MULTIHEAD

...

OLDPWD=/home/matados2k/curso; export OLDPWD

cd /home/matados2k/curso/miscomandos || {

echo 'Execution directory inaccessible' >&2

exit 1

}

ls -l > lista.txt



matados2k@imperio:~/curso/miscomandos$


Como puedes observar, nos da toda toda la información que podamos necesitar saber y más, para conocer qué se va a ejecutar y predecir con exactitud qué puede pasar.


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/at.allow' y '/etc/at.deny'.


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


Veamos la configuración que tengo:


matados2k@imperio:~/curso/miscomandos$ cat /etc/at.allow

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

matados2k@imperio:~/curso/miscomandos$ cat /etc/at.deny

cat: /etc/at.deny: Permiso denegado

matados2k@imperio:~/curso/miscomandos$ su

Password:

imperio:/home/matados2k/curso/miscomandos# cat /etc/at.deny

alias

backup

bin

...

sys

www-data

imperio:/home/matados2k/curso/miscomandos#


Despedida.


Vamos a cortar aquí para no dejar el siguiente comando a medias. Como veis, 'at' y los demás comandos vistos en esta entrega se nos pueden quedar cortos y necesitamos algo con mucha más potencia... Que es precisamente lo que veremos en la siguiente entrega, nos vemos pronto.


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 825 visitantes
Advertisement