Programar tareas con anacron

Linux cuenta con la utilidad cron para programar tareas. cron puede usarse incluso por usuarios normales (no administradores) mediante el comando crontab. Sin embargo, las tareas programadas con cron requieren que la PC esté encendida las 24 horas, es decir, si una tarea está programada para ejecutarse a las 12:00 a.m. pero la PC no está encendida en ese momento, entonces la tarea no se ejecutará. Para este tipo de casos existe anacron, un comando de Linux que permite programar tareas que se ejecutarán cuando sea posible mientras la PC esté encendida y no necesariamente a una hora específica. Es decir, anacron no funciona para tareas que deben ejecutarse a una hora exacta (para eso debe usarse cron), sino para tareas que deben ejecutarse diariamente, semanalmente o mensualmente independientemente del tiempo que pase encendida la PC (anacron ejecutará las tareas tan pronto como sea posible cuando detecte que éstas deben ejecutarse).

Por razones obvias, anacron es ideal para PCs de escritorio que no están encendidas las 24 horas. Sin embargo, a diferencia de cron, la configuración predeterminada de anacron no puede ser modificada por usuarios normales. Si puedes modificar la configuración como root, entonces no hay mayor problema y puedes usar el archivo predeterminado de anacron localizado en /etc/anacrontab (aunque debes notar que las tareas programadas se ejecutarán también como root). Para usuarios normales también es posible configurar anacron siguiendo algunos pasos descritos a continuación.

Read More

Operaciones aritméticas en la línea de comandos de Linux

Es posible hacer operaciones aritméticas sencillas usando la línea de comandos de Linux que permite hacer operaciones con números enteros usando la forma $((expresión)), como se muestra a continuación:

monstruosoft@monstruosoft-PC:~$ echo $((320 * 240))
76800
monstruosoft@monstruosoft-PC:~$ echo $((320 * 200))
64000
monstruosoft@monstruosoft-PC:~$ MINUTOS=$((60 * 24 * 365))
monstruosoft@monstruosoft-PC:~$ echo $MINUTOS
525600
monstruosoft@monstruosoft-PC:~$ SEGUNDOS=$(($MINUTOS * 60))
monstruosoft@monstruosoft-PC:~$ echo $SEGUNDOS
31536000

Las operaciones de punto flotante no se pueden realizar de esta manera pero pueden hacerse usando el comando bc de la siguiente manera:

monstruosoft@monstruosoft-PC:~$ echo '164.78 * 52.93' 
164.78 * 52.93
monstruosoft@monstruosoft-PC:~$ echo '164.78 * 52.93' | bc
8721.80

Este tipo de instrucciones pueden ser útiles cuando necesitamos hacer operaciones aritméticas en la línea de comandos. Por ejemplo, si tenemos un video y hemos anotado el timestamp del cuadro inicial y final de una escena que queremos recortar, podemos hacerlo con FFmpeg pero los argumentos para recortar un video son el punto de inicio -ss, y la duración a partir de ese punto -t. En este caso podemos usar alguna de las formas descritas anteriormente para hacer operaciones aritméticas para calcular la duración, por ejemplo, de la siguiente manera:

monstruosoft@monstruosoft-PC:~$ INICIO=456.81
monstruosoft@monstruosoft-PC:~$ FIN=1776.39
monstruosoft@monstruosoft-PC:~$ DURACION=$(echo "$FIN - $INICIO" | bc)
monstruosoft@monstruosoft-PC:~$ echo $DURACION
1319.58
monstruosoft@monstruosoft-PC:~$ ffmpeg -i mi_video.avi -ss $INICIO -t $DURACION escena.mp4

Sumas, restas y multiplicaciones son sólo algunas de las operaciones que se pueden realizar con el comando bc. Para más detalles puedes revisar la documentación.

Enviar notificaciones al escritorio

La mayoría de las distros de Linux tienen un conveniente sistema para enviar notificaciones al escritorio usando el paquete libnotify. La forma en que los mensajes son desplegados depende del sistema de notificación instalado en tu distro pero con toda seguridad ya viene uno instalado de forma predeterminada por lo que se puede usar el comando notify-send para enviar notificaciones al escritorio. Esto es útil, por ejemplo, dentro de scripts para notificar al usuario de las acciones que se están realizando. Para enviar una notificación al escritorio sólo tenemos que ejecutar el siguiente comando:

monstruosoft@monstruosoft-PC:~$ notify-send 'Hola mundo!' 'Este es un ejemplo.' --icon=dialog-information

Para enviar una notificación que desaparezca automáticamente después de unos segundos, se puede usar la opción transient:

monstruosoft@monstruosoft-PC:~$ notify-send 'Hola mundo!' 'Este es un ejemplo.' --icon=dialog-information --hint=int:transient:1

Para más información sobre el tipo de notificaciones que se pueden usar, no olvides leer la documentación de notify-send.