domingo, 15 de marzo de 2009

Cómo programar tareas automáticas usando Crontab o Gnome Schedule

Fuente: Ubuntu Documentation. Man

En caso de querer programar una tarea podemos usar Crontab o, en su defecto, Gnome Schedule, que no es más que una interfaz gráfica de la primera. Para entender cómo funcionan ambas herramientas es necesario tener claro qué es cron y su relación con crontab:

Cron es un demonio, es decir, es un proceso que se ejecuta en segundo plano, sin interactuar con el usuario, que es usado para programar tareas que serán ejecutadas en un tiempo específico. Por otra parte, crontab es un archivo de texto y cada usuario posee el suyo. En este archivo el usuario puede especificar el momento en que se ejecutará una determinada tarea. Es así como en el interior del archivo crontab se encuentra una lista de comandos y sus respectivos tiempos de ejecución. Ambos factores son controlados por el demonio cron y son llevados a cabo en segundo plano por el sistema. De igual manera, el sistema también posee un crontab, en donde se especifica una serie de tareas que son realizadas de forma regular.

Como usuario puedes usar cron de dos maneras: editando el archivo crontab o mediante Gnome Schedule.

Editando el archivo crontab
Primero, para editar crontab, en el terminal escribes:
crontab -e

Se te pedirá que escojas un editor. Yo he escogido nano. La pantalla que verás será parecida a esta:



Como podrás ver se trata de un archivo cuyo contenido se limita a una linea antecedida por el signo #. Ello nos indica que se trata de un comentario y será ignorado por el sistema. Este comentario cumple la función de orientarnos respecto al formato que deben respetar las entradas que agreguemos en el archivo. Como puedes ver, la entrada típica de crontab cumple con el formato:
[m] [h] [dom] [mon] [dow] [command]

Una manera de no olvidar lo que cada parámetro significa es entendiendo su significado:

Parámetro Significado Rango

m minute (minuto) 0-59
h hour (hora) 0-23
dom day of month (día del mes) 1-31
mon month (mes) 1-12
dow day of week (día de la semana) 0-6 (0=Domingo)
command command (comando)

Por lo tanto, en caso de dudas basta con mirar la primera línea de nuestro archivo para saber qué parámetro incluir sin la necesidad de memorizar nada.
Veamos un ejemplo práctico. Supongamos que tienes un script que respalda nuestra colección Amarok. Supongamos que su ruta es /home/usuario/Script/amarok/backup_coleccion_amarok. En caso de que deseemos ejecutarlo el primero de cada mes, a las 4 de la tarde, escribimos la siguiente entrada en nuestro archivo:
* 16 1 * * /home/usuario/Script/amarok/backup_coleccion_amarok

Cuando el parámetro del día de la semana (dow) y el correspondiente al día del mes (dom) son ingresados, basta que uno de los dos se cumpla para que la tarea se ejecute. Por lo tanto, si queremos que el script corra el primero de cada mes, además de todos los lunes, en ambos casos a las 4 de la tarde, escribimos:
* 16 1 * 1 /home/usuario/Script/amarok/backup_coleccion_amarok

Es posible especificar rangos de números para cada parámetros escribiendo dos números separados por un guión. Además puedes ingresar listas de números separándolos por comas. Ambos formatos pueden convivir en un mismo parámetro. Por lo tanto, en caso de que desees que el script se corra el primero de cada mes, a la vez que todos los días 5, 6 y 7 de cada mes, siempre a las 4 de la tarde, la entrada quedaría así:
* 16 1,5-7 * * /home/usuario/Script/amarok/backup_coleccion_amarok

También puedes especificar pasos (steps) con el fin de saltarte determinados números. Cada paso afecta a la unidad de tiempo al que se asocia. Para ello es necesario escribir:
‘‘/número’’

Supongamos que deseas que el script se ejecute cada tres horas el primero de cada mes a partir de las 4 de la tarde:
* ‘‘16-23/3‘‘ 1 * * /home/usuario/Script/amarok/backup_coleccion_amarok

En caso de que desees ver la lista de tareas que hayas programado escribes en el terminal:
crontab -l

Para borrar tu crontab escribes:
crontab -r


Utilizando Gnome Schedule
Es posible instalarl Gnome Schedule con Synaptic o escribiendo en el terminal:
sudo apt-get install gnome-schedule

Una vez instalado puedes correrlo desde Aplicaciones-->Herramientas del sistema-->Tareas programadas. Te aparecerá una ventana parecida a esta:



Si presionas en el botón Nuevo se te preguntará qué tipo de tarea deseas añadir:



Básicamente son tres opciones: tareas que se ejecutan periódicamente, tareas que se ejecutan una sola vez y usar una programación predefinida anteriormente.
Supongamos que quieres ejecutar el script el primero de cada mes, a las 4 de la tarde. Escoges la primera opción. Luego basta hacer click en la opción Advanced y anotar los datos necesarios:



Como podrás ver es posible en este punto guardar la programación de la tarea en caso de que quieras utilizarla posteriormente escogiendo la opción Add as template.
Una vez programada la tarea esta habrá de aparecer en la ventana principal:



Ojo que Gnome-Scheduler no es otra cosa que una interfaz gráfica para editar nuestro archivo crontab. Por lo tanto, si ejecutamos el comando crontab -l podemos ver que la tarea está programada y en caso de necesidad, podemos modificar la entrada editando el archivo de texto.

domingo, 1 de marzo de 2009

Cómo hacer respaldos automáticos de tu colección Amarok 1.4 con base de datos MySQL

Fuente: Wiki Amarok

Para el siguiente proceso de respaldo se asume que antes has configurado correctamente tu colección Amarok para que use una base de datos MySQL.

A continuación tienes dos script que realizarán todo el proceso de respaldo y restauración. El primero respalda de manera automática, con la frecuencia que tú determines, toda tu colección de música. El segundo cumple la función de restaurar tu colección sin perder tus etiquetas, carátulas, etc. incluso en caso de reinstalar todo el sistema.

El script de respaldo

El script de respaldo lo puedes encontrar acá.

1. El script de respaldo guarda una copia de:
  • La base de datos MySQL.
  • El archivo amarokrc.
  • Las listas dinámicas, inteligentes y estáticas.
  • Las carátulas de los discos.
  • Los temas del navegador de contexto.

2. Los respaldos se guardan en ~/backup dentro de una carpeta cuyo nombre corresponde a la fecha del respaldo según el formato día-mes-año.

3. Antes de que el script se ejecute debe ser modificado, cambiando según corresponda:
  • [Línea 9] El nombre de la base de datos MySQL.
  • [Línea 12] El nombre del usuario MySQL.
  • [Línea 13] El password MySQL.
4. En caso de que lo desees puedes modificar la ruta de los siguientes elementos (sólo necesario en caso de una instalación no estándar):
  • [Línea 16] El archivo amarokrc.
  • [Línea 19] Las listas dinámicas.
  • [Línea 22] Las listas inteligentes.
  • [Línea 28] Las listas estáticas.
  • [Línea 25] Las carátulas de los discos.
  • [Línea 31] Los temas del navegador de contexto.
5. En caso de que desees no respaldar algún elemento basta con comentar la linea correspondiente anteponiendo el signo #.

6. Si ejecutas el script más de una vez el mismo día (en caso de ejecución manual) se te preguntará si deseas sobreescribir los archivos anteriormente guardados (Atención: esto no ocurre en el caso de las caratulas, los temas del navegador de contexto y las listas estáticas)

7. Para que este script corra de manera automática debes utilizar la herramienta crontab.

El script de restauración

El script de restauración lo puedes encontrar acá.

1. Antes de que el script se ejecute debe ser modificado, cambiando según corresponda:
  • [Línea 33] El nombre del usuario MySQL (en el script se asume USUARIO) y el nombre de la base de datos (en el script se asume amarok)
2. Es posible modificar la ruta de los siguientes elementos (sólo necesario en caso de una instalación no estándar):
  • [Línea 15] El archivo amarokrc.
  • [Línea 9] Las listas dinámicas.
  • [Línea 12] Las listas inteligentes.
  • [Línea 21] Las listas estáticas.
  • [Línea 18] Las caratulas de los discos.
  • [Línea 24] Los temas del navegador de contexto.

3. En el momento de restaurar la colección se te pedirá el password del root MySQL.

4. Se te pedirá que ingreses la fecha del respaldo a restaurar en el orden día-mes-año.

5. Las listas estáticas serán restauradas, pero deberás importarlas posteriormente desde Amarok para que el programa las reconozca.

6. Se asume que este script se ejecuta de manera manual cuando sea necesario.

7. En caso de que sea necesario volver a otorgar los permisos al usuario MySQL debes escribir en el terminal:
mysql -p -u root
GRANT ALL ON amarok.* TO amarok@localhost IDENTIFIED BY 'PASSWORD';
FLUSH PRIVILEGES;
QUIT;

Donde la sintaxis de la instrucción GRANT significa:
GRANT [permisos] ON [base_datos].[tabla] TO [usuario]@[host_de_conexión] IDENTIFIED BY '[password para el usuario]'
Otra forma de hacerlo es con MySQL Administrator.

8. En caso de que desees no restaurar algún elemento basta con comentar la linea correspondiente anteponiendo el signo #.