martes, 21 de diciembre de 2010

Programar/Automatizar tareas no repetitivas, con el comando at

En el tema Crontab, programar / automatizar tareas repetitivas explique como programar/automatizar tareas repetitivas con el comando crontab; y en Programar / automatizar tareas repetitivas con Gnome-Schedule como hacerlo con su interfaz gráfica Gnome-Schedule. El comando crontab sirve para tareas que queremos que se ejecuten de forma repetida en horarios determinados, pero si queremos que una tarea (o varias ) se ejecute una sola vez en un tiempo determinado, debemos usar el comando at.

Daemon atd: El comando at se encarga de ejecutar uno o varios comandos en una fecha indicada en el futuro;  tiene un daemon atd que permite ejecutarlo en el momento que el daemon lo active. Una sola llamada a este comando basta para postergar la ejecución de varias instrucciones, al conjunto de estas se le llama trabajo o job (por su significado en inglés).  ( Desde el programa boot-up-manager - el ejecutable es bum - he visto que el demonio del comando at ( atd) no estaba activado para que se ejecutara desde el inicio del sistema; he activado el atd, y reiniciado el pc, para que el daemon atd se ejecute desde el inicio ).

El daemon atd guarda los trabajos o jobs creados , asignándole un número, en la carpeta /var/spool/cron/atjobs ; una vez ejecutada la tarea, su job correspondiente desaparece de dicha carpeta.

Controlar los usuarios que pueden ejecutar el comando at: En el archivo /etc/at.deny se pueden poner el nombre de usuarios que queramos que no puedan usar este comando, y al revés en el archivo de texto (no viene creado por defecto ) /etc/at.allow se pueden poner el nombre de los usuarios que queramos que puedan usar este comando: para que el comando ejecute una tarea de un usuario, este debe estar incluido en éste archivo. Si creas el archivo de texto /etc/at.allow sólo el usuario que hayas incluido y root pueden ejecutar el comando "at". Ambos archivos solo se pueden editar con permisos de root : sudo gedit /etc/at.allow y sudo gedit /etc/at.deny

El 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 archivo /etc/at.allow existe, sólo  los  usuarios  cuyos  nombres están mencionados aquí tienen permiso para utilizar at.
Si  el archivo /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 root  puede utilizar at.
Un archivo /etc/at.deny vacío significa que todo usuario puede  utilizar  estos comandos, esta es la configuración por defecto.

Controlar las tareas creadas: 1-El comando atq muestra los trabajos, con su número, que se han guardado y no se han ejecutado aún , y 2-el comando atrm elimina un trabajo,indicando el número del trabajo que se desea eliminar: sirve para eliminar antes de que se ejecuta una tarea que hemos creado, y que luego nos hemos arrepentido y no queremos que se ejecute.

Sintaxis del tiempo con el comando at:

El comando at es un comando que se encarga de ejecutar tareas a una hora determinada. Tiene la forma at [hora] [fecha]. Tiempo puede ser:

* Hora: admite los siguientes formatos para las Horas y Minutos: HH:MM, HHMM, HH.MM, HH,MM, Hpm, Ham, también entiende las palabras midnight (00:00), noon (12:00), now (en el momento), teatime (16:00)
* FechaMeses y Dias y Años: Admite los siguientes formatos:  Meses: en inglés: JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC, el Dia y Año  en número , DD.MM.AA (formato europeo ) , MMDDAA, MM/DD/AA, AA-MM-DD ; también palabras en ingles:  today (hoy), tomorrow (mañana), now + tiempo: por ejemplo: now + 5 years, now + 1 min, soporta el singular y el plural (year/s ) , min, minute, hour, day, week, month y year.

Si no se especifica la hora se toma la hora actual.
Si no se especifica año se toma el más próximo.
Si no se especifica fecha se toma la más próxima.

Tras poner at [tiempo] sale at> para ir escribiendo las órdenes de una en una pulsando intro. Para comunicarle que hemos acabado se pulsa Ctrl+D. Para cancelar siempre podrás hacer Ctrl+C ( para cancelar cualquier programa de consola ).

usuario@mint ~ $ at now + 10 min
warning: commands will be executed using /bin/sh
at> sylpheed
at> nautilus
at> <EOT>
job 402 at Sat Dec 11 21:43:00 2010
usuario@mint ~ $

Las órdenes, el trabajo a realizar,  se guardan aunque cierres la consola. Para ver la lista de tareas se usa el comando atq y para borrar se usa atrm y el número o números de las tareas a eliminar. Dichos números aparecen en atq.

Ejemplos de tiempo:
at 1pm may 05            ejecutar el 5 de Mayo a las 13h
at tomorrow                ejecutar mañana a esta hora
at 8:00 tomorrow      ejecutar mañana a las 8h
at now + 1 day            ejecutar mañana a esta misma hora
at 45:12 Ene 10          ejecutar el 10 de Enero a las 12h y 45 min
at 37:04 12 11             ejecutar el 11 de Diciembre  a las 4h y 37 min
at now + 1 week         ejecutar dentro de una semana a esta misma hora

--------------------------------------

Sintaxis del comando que queremos ejecutar con el comando at:

== Para ejecutar un programa gráfico hay que poner DISPLAY=:0 un espacio y el ejecutable, por ejemplo:
usuario@mint ~ $ at now + 2 min
warning: commands will be executed using /bin/sh
at> DISPLAY=:0 sylpheed
at> <EOT>
job 54 at Fri Dec 10 09:42:00 2010
usuario@mint ~ $

== Para ejecutar un comando hay que poner la dirección completa , por ejemplo:
usuario@mint ~ $ at now + 2 min
warning: commands will be executed using /bin/sh
at> cp /home/usuario/fsck /home/usuario/Escritorio
at> <EOT>
job 54 at Fri Dec 10 09:42:00 2010
usuario@mint ~ $

== Para ejecutar un script con el que se ejecute un programa gráfico, hay que poner DISPLAY=:0 , un espacio, y la ruta completa donde este el script:
usuario@mint ~ $ at now + 2 min
warning: commands will be executed using /bin/sh
at> DISPLAY=:0 /home/usuario/changebutton
at> <EOT>
job 54 at Fri Dec 10 09:42:00 2010
usuario@mint ~ $

----------------------------------------------------------------------------

No hay comentarios:

Publicar un comentario

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.