Programar tareas con ‘at’ en Linux

Un comando que he de reconocer que no uso todo lo que debería, es «at». Esta herramienta nos permite programar tareas que se ejecutarán una única vez. Es realmente fácil de usar y funciona a las mil maravillas. No tiene sentido usar «cron» para este tipo de tareas, puesto que cron está pensado para programar tareas que se ejecutarán con cierta periodicidad.

La idea es primeramente escribir en qué momento se va a ejecutar la tarea. Por ejemplo, si estamos a jueves a las 16:00, y queremos ejecutar una tarea una única vez la madrugada del jueves al viernes, a las 06:00, podemos ejecutar:

[root@myserver]# at -v 06:00
Fri May 17 06:00:00 2013

Actualización: Si por el contrario, queremos programar la tarea para que se ejecute el próximo 18 de Mayo a las 03AM, bastará con ejecutar:

[root@myserver]# at -v 3am May 18
Sat May 18 03:00:00 2013

La opción «-v» nos devolverá la fecha en que se va a programar la tarea. Al ejecutar la sentencia, nos entrará en «at>», que es donde tendremos que introducir la tarea a ejecutar, que al igual que hacemos con cron, puede ser una instrucción o por ejemplo la ejecución de un script:

at> /home/adri/script.sh >> /tmp/out_script.log 2>&1

Una vez acabados de introducir los comandos a ejecutar, pulsaremos «Control+D» para salir de «at>» y finalizar así las instrucciones a ejecutar. Ésto nos mostrará el fin de la tarea, el job id y de nuevo la fecha y hora programados:

at> <EOT>
job 1 at 2013-05-17 06:00

Con «at -l» listaremos las tareas pendientes, donde el primer carácter corresponderá con el id del job:

[root@myserver]# at -l
1 2013-05-17 06:00 a root

Podremos ver los detalles de la tarea programada, con «at -c» seguido del id del job. Ésto nos mostrará todo lo que se ejecutará, incluído el entorno:

[root@myserver]# at -c 1

Finalmente, siempre podremos cancelar un job, antes de la fecha de ejecución, con la opción «-d»:

[root@myserver]# at -d 1

Fuente:

http://content.hccfl.edu/pollock/unix/atdemo.htm

Crontab de todos los usuarios

He encontrado un script tan útil como sencillo, que quisiera compartir. Se trata de un script que muestra el crontab para todos los usuarios del sistema.

La idea es estar logueado como root al ejecutarlo, para que así, se puedan revisar todos los usuarios del sistema en /etc/password, ejecutando un «crontab -l -u» para cada uno de ellos.

El script es tan sencillo que bastará con ejecutarlo desde la misma línea de comandos.

for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done

Fuente: http://stackoverflow.com/questions/134906/how-do-i-list-all-cron-jobs-for-all-users