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