miércoles, 15 de diciembre de 2010

Programar/Automatizar tareas repetitivas, con Gnome-Schedule

Imagina que quieres programar una tarea para que se ejecute periódicamente, en un determinado momento. Por ejemplo, para hacer que se ejecute el gestor de correos 3 veces al día, o para hacer una copia de seguridad de tus archivos el día 1 de cada mes, o cambiar el fondo de escritorio cada30 minutos, este tipo de tareas son Tareas Repetitivas. Para programar/automatizar tareas existe un programa gráfico: Gnome-Schedule ( también se puede hacer de otra forma, con la terminal: crontab-programar/automatizar-tareas , es conveniente leer éste tema para comprender mejor el tema actual). Una vez hallamos programado la tarea no hace falta que tengamos abierto el programa Gnome-Schedule, lo podemos cerrar, que aún así se ejecutará la tarea en el tiempo que hayamos programado, ya que este programa es la interfaz gráfica del comando crontab que se ejecutará en segundo plano.

Crear Tareas que se ejecuten repetidamente:

Con este programa podemos programar/automatizar la ejecución tanto de:  a) programas gráficos, b) scripts,  c) comandos.

Este programa gráfico es la interfaz gráfica del servicio cron, el cual lee un fichero -crontab - donde le indicamos las tareas y cuando las queremos realizar y él se encarga de ejecutarlas por nosotros en el preciso momento que le hayamos indicado en crontab , por lo que tenemos primero que:

Crear un archivo crontab para cada usuario que quiera usar este programa ( naturalmente hacemos esto desde cada sesión de un usuario ):

1-Primero creamos con gedit un archivo de texto, con el texto:
SHELL=/bin/bash
DISPLAY=:0
2-Guardas este archivo con el nombre: cron-usuario , en el directorio /home/usuario   ( Con cada usuario el archivo cron-usuario llevara el nombre del usuario )
3-En la terminal ejecutas: crontab cron-usuario ( luego si quieres ya puedes borrar el archivo de texto cron-usuario).

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

Inicio de Gnome-Schedule:

Una vez ejecutamos el programa, nos aparece la ventana principal del programa



desde la que podemos seleccionar el tipo de tarea programada: "tarea que se lanzará repetidamente"



A continuación se abre la ventana de Edición de la nueva tarea programada, desde la que vamos a crear una tarea que queremos que se ejecute repetidamente en un tiempo determinado.

== En Descripción: ponemos un nombre que nos diga lo que va a hacer la tarea.
== En Comando: ponemos lo siguiente para crear una tarea para ejecutar una de estas tres cosas:
-- un comando: hay que poner el comando, por ejemplo: tar cvf backup-firefox.tar /home/usuario/.mozilla
-- un script: hay que poner la ruta completa de donde esta el script: por ejemplo: /home/usuario/Scripts/copia-de-firefox
-- un programa gráfico: el nombre del ejecutable de un programa gráfico, por ejemplo: sylpheed

Editado ( 3-1-2011) : si para ejecutar un programa gráfico solo ponemos su ejecutable la tarea lanzará el programa con su interfaz en inglés, para que se lance el programa con la interfaz en español hay que poner: LANG=es_ES.utf8 ejecutable ; en el ejemplo, si como ejecutable ponemos: firefox, se ejecuta el programa en ingles, si ponemos: LANG=es_ES.utf8 sylpheed , si que se ejecuta el programa en español.

Editado (6-1-2011): Para los que vivan fuera de España escribir en un terminal:  set | grep LANG
Saldrá por ejemplo LANG=es_AR.utf8 para los que vivan en Argentina.
usuario@mint ~ $ set | grep LANG
GDM_LANG=es_AR.utf8
LANG=es_AR.utf8
usuario@mint ~ $

En el ejemplo habría que poner, si vives en Argentina,  LANG=es_AR.utf8 sylpheed  . El idioma que aparece al ejecutar el comando varia en función de la lenguna ( o la variante del Español ) en la que iniciemos el sistema.

== En Comportamiento: se puede elegir entre:
-- Comportamiento predeterminado: para un programa gráfico
-- Suprimir salida: si se ejecuta de forma automática sin necesidad de que intervenga para nada el usuario.
-- Aplicación X: para un comando o script en el que se necesite contestar en la terminal
-- Aplicación X: suprimir salida: para un comando o script en el que no se necesite contestar en la terminal, sino que se ejecute de forma automática.



== En Hora y Fecha Básico: podemos elegir entre las opciones: ejecutar  "cada minuto", "cada hora", "cada día", "cada mes", "cada semana",, "al reiniciar"

== En Hora y Fecha Avanzado: podemos especificar mucho mas cuando queremos que se ejecute la tarea, para ello debemos saber como "Editar los Campos de Tiempo"

Edición de los Campos de Tiempo: los editaremos a nuestro gusto, con clíck en los botones Editar del campo que queramos editar, en la siguiente ventana,  según indico a continuación.



El valor que puede tomar cada campo es como sigue:

- minutos: va de 0 a 59 y representa el minuto en que se ejecuta
- horas: va de 0 a 23 y representa la hora en que se ejecuta
- día: va de 1 a 31 y es el día del mes en que se ejecuta
- mes: va de 1 a 12 y representa el mes que se ejecuta
- día de la semana: va de 0 a 7 y el el día de la semana en que se ejecuta (el domingo se puede indicar con el 0 o con el 7, el lunes es 1, martes 2, etc)
Con un asterisco * se indica todo es decir todos los minutos, o todos los meses, o todos los días.
‎También se admiten rangos en los campos:
un guión - significa: 0-15 -> intervalo de valores: todos los valores de 0 hasta 15
una coma , indica: 15,30,45 -> valores únicos, solo esos tres valores: 15, 30 y 45
una barra / indica: 1-10/2 -> un incremento de valores: valores en incremento de 2 en 2 , empezando desde 1, es decir: 1,3,5,7,9

——————-

Ejemplos de Campos de Tiempo: ( se omite el comando que se ejecutaría siguiendo las instrucciones dadas por los campos de tiempo anteriores a él ):

0 1 * * * *    Se ejecuta al minuto 1 de cada hora de todos los días
15 8 * * *    A las 8:15 a.m. de cada día
15 20 * * *    A las 8:15 p.m. de cada día
00 5 * * 0    A las 5 a.m. todos los Domingos
* 5 * * 0    Cada minuto de 5:00a.m. a 5:59 a.m. todos los Domingos
45 19 1 * *    A las 7:45 p.m. del primero de cada mes
01 * 20 7 *    Al minuto 1 de cada hora del 20 de Julio
10 1 * 12 1    A la 1:10 a.m. todos los lunes de Diciembre
00 12 16 * 3    A las 12h de los días 16 de cada mes y que sea Miércoles
30 9 20 7 4    A las 9:30 a.m. del dia 20 de Julio y que sea Jueves
30 9 20 7 *    A las 9:30 a.m. del 20 de Julio de cualquier día de la semana
20 * * * 6    Al minuto 20 de cada hora de los Sábados
20 * * 1 6    Al minuto 20 de cada hora de los Sábados de Enero
——————–
–   59 11 * 1-3 1,2,3,4,5    A las 11:59 de Lunes a Viernes, de Enero a Marzo
–  45 * 10-25 * 6-7    Al minuto 45 de todas las horas de los días 10 al 25 de todos los meses y que el día sea Sábado o Domingo
–  10,30,50 * * * 1,3,5    En el minuto 10, 30 y 50 de todas las horas de los días Lunes, Miércoles y Viernes
–  */15 10-14 * * *    Cada quince minutos de las 10:00a.m. a las 2:00p.m.
–  * 12 1-10/2 2,8 *    Todos los minutos de las 12h, en los días 1,3,5,7 y 9 de Febrero y Agosto. (El incremento en el tercer campo es de 2 y comienza a partir del 1)
–  0 */5 1-10,15,20-23 * 3    Cada 5 horas de los días 1 al 10, el día 15 y del día 20 al 23 de cada mes y que el día sea Miércoles
–  3/3 2/4 2 2 2    Cada 3 minutos empezando por el minuto 3 (3,6,9, etc.) de las horas 2,6,10, etc (cada 4 horas empezando en la hora 2) del día 2 de Febrero y que sea Martes

Podemos programar tareas que se ejecuten cada hora, o cierto día del mes, o todos los meses, o todos los días, o solo los Sábados, o Miércoles, etc. Todo depende de la combinación de valores que pongas en esos campos.

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

Gnome-Schedule con permisos de root: El programa Gnome-Schedule se puede usar también con permisos de root, si queremos que las tareas las realice el root, ejecutando: sudo gnome-schedule; Si queremos que se ejecute un script o comando que en su sintaxis lleva el comando sudo, es decir que necesita permisos de root para ejecutarse, tendremos que usar Gnome-Schedule con permisos de root para ejecutar dicha tarea.

Desde el programa Gnome-Schedule del usuario ( y de cada usuario si hay varios  ) y desde el del root, se accede cada uno a sus propias tareas. Desde el Gnome-Schedule ejecutado con permisos de root se puede acceder  ( y modificar )   a las tareas de cada uno de los usuarios que tengamos en el sistema, a través de una nueva opción (cambiar de usuario ) que aparece en la barra de herramientas del programa.


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

viernes, 10 de diciembre de 2010

Sylpheed: programa de correo

Sylpheed  es un programa Administrador de Correo Electrónico, que tiene las siguientes características:
- Una interfaz simple - Una configuración bien organizada  - Ligero  - Soporta varios protocolos  - Poderoso sistema de búsqueda y filtrado - Control de correo basura.

Un motivo por el que me he pasado de Thunderbird a Sylpheed es que éste guarda en dos carpetas distintas y bien delimitadas, por una parte la configuración del programa, y por otra los correos recibidos, guardados, etc, con lo que es mas fácil guardar y recuperar una copia de seguridad de ambas cosas o de solo una de ellas. Otro motivo es que es un programa mas ligero, y se abre más rápido.

Para su mejor funcionamiento y utilización hay que instalar los paquetes: sylpheed, sylpheed-i18n ( para que este en español ) y sylpheed-doc ( para que se tenga acceso a su manual -> en Sylpheed -> Ayuda-Manual en español-> ( 1 ) y  y Preguntas Frecuentes   (faq )  (2)

(1) file:///usr/share/doc/sylpheed-doc/manual/es/sylpheed.html y  (2)  file:///usr/share/doc/sylpheed-doc/FAQ/es/sylpheed-faq.html

También se puede consultar su manual online:  http://sylpheeddoc.sourceforge.net//es/manual/manual.html

I-Creación/Configuración básica de las cuentas de correo:

Como con cada proveedor de servicios de correo la configuración que hay que tener es distinta ( lo cual me quita las ganas de tener otros proveedores de correo con los que tendría que volver a averiguar como configurarlo; se echa una vez mas la falta de standarización.) he hecho este tema para tener una “copia de seguridad” de como hay que configurar las distintas cuentas de emails que tengo:

= Cuenta de correo de ono.com

Al iniciarse por primera vez el programa sale una ventana en la que nos dice que por defecto se va a crear por defecto un buzón la carpeta /home/usuario/Mail, aceptamos. Luego aparece otra ventana en la que nos invita a crear una cuenta de correo, pero yo prefiero decir que no ( click en cancelar )  en ese momento, y crearlas luego como se indica a continuación.

Se realiza en Configuración-> Editar Cuentas


Hacemos click en añadir, para que se abra la ventana de Edición de Cuentas, o a editar para editar una cuenta ya creada antes.

En la ventana de Edición de Cuentas hay varias pestañas que hay que editarlas como se ve en las imágenes ( como ejemplo he puesto los datos de una cuenta de correo de ono.com que es la que uso; para otro tipo de cuenta los datos que haya que poner en cada una de las ventanas puede ir variando.  ) :

- pestaña Básica:  - nombre de la cuenta: podemos poner el que queramos, lo logico es poner el nombre de usuario u otro que sea descriptivo de la cuenta  - nombre completo: nombre de usuario   - dirección de correo   - protocolo pop3   - servidor de recepción: pop3.ono,com  - servidor de envio: smtp.ono.com   - nombre de usuario: (solo el nombre )   -contraseña





- pestaña Enviar: seleccionamos: - Añadir campo fecha  - Generar ID-mensaje ,   -Autentificación smtp: automática ,   - nombre de usuario ( solo nombre ) ,  - contraseña




- pestaña Recibir: la carpeta que hemos puesto como buzón por defecto (#mh/Correo/hatteras) la hemos creado previamente: click con el botón derecho del ratón sobre Correo MH y "crear nueva carpeta": en este ejemplo le he llamado hatteras, como el nombre de la cuenta. ; lo demás es opcional: por ejemplo: - Recibir todo, comprueba si hay mensajes nuevos en esta cuenta  - Eliminar mensajes del servidor al recibir  - Filtrar mensajes al recibir-



- pestaña Componer:



- pestaña Privacidad: es opcional, lo dejo como viene por defecto




- pestaña SSL: seleccionamos no usar ssl  ( tanto en pop3 como en smtp ) y usar ssl no bloqueante




- pestaña Avanzadas: - No seleccionamos ni puerto smtp, ni pop3, lo demás es opcional, podemos no cambiar nada o en mi caso la carpeta que he puesto para que se guarden en ella los mensajes enviados  (#mh/Correo/ha****/enviados) la he creado previamente.


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

= Cuenta de correo de gmail.com:

Creamos como en el caso anterior las carpetas que queramos, y en las propiedades de esta cuenta tenemos:

Nombre de la cuenta: un nombre descriptivo de la cuenta, por ejemplo el nombre de usuario

- pestaña Básica:

- Nombre de la cuenta   - Nombre completo: Si queremos poner nuestro nombre de pila
- Dirección de correo: oficina@gmail.com  - Organización: Si queremos ponerla  - Protocolo: POP3
- Servidor de recepción: pop.gmail.com    - Servidor SMTP ( enviar ): smtp.gmail.com
- Usuario: ponemos la dirección de correos, no solo el nombre de usuario   - Contraseña

- pestaña Enviar:

- Añadir campo Fecha, y - Generar ID-Mensaje, - Autentificación smtp: método automático,  - dejamos en blanco tanto el nombre de usuario como la contraseña

- pestaña Recibir:

La carpeta que hemos puesto como buzón por defecto (#mh/Correo/******) la hemos creado previamente: click con el botón derecho del ratón sobre Correo MH y “crear nueva carpeta”: en este ejemplo le he llamado *******, como el nombre de la cuenta. ; lo demás es opcional: por ejemplo: - Recibir todo, comprueba si hay mensajes nuevos en esta cuenta  - Eliminar mensajes del servidor al recibir  - Filtrar mensajes al recibir-

- pestaña SSL:

- Usar SSL para la conexión POP3.   - Usar SSL para la conexión SMTP.    - Utilizar SSL no bloqueante

- pestaña Privacidad: es opcional, lo dejo como viene por defecto

- pestaña Avanzadas:

- Puerto SMTP: 465  - Puerto POP3: 995

Lo demás es opcional, podemos no cambiar nada o como en mi caso la carpeta que he puesto para que se guarden en ella los mensajes enviados  (#mh/Correo/******/enviados) la he creado previamente.
--------------------------------

II-Otras configuraciones: El programa tiene muchas posibilidades de configuración; desde mi punto de vista lo mas básico es lo siguiente:


== Iconos de la Barra de Herramientas: La siguiente configuración, con los icónos que indico, es la que me gusta:

- Buzón remoto - Recibir todo - Recibir - Componer - Borrar - Basura -no Basura - Agenda de direcciones.
 




- Enviar -Reenviar - Responder - reenviar A Todos - Anterior mensaje  - Posterior mensaje  -Buscar en los mensajes - Preferencias de la cuenta



== Control de Correo Basura: el programa tiene al menos tres formas de controlar el correo basura:  Obviamente hay que haber instalado los paquete bogofilter desde Synaptic.

En   -> Configuración -> Preferencias comunes -> pestaña Correo Basura -> Activar control del correo basura:  escoger bogofilter o bsfilter ; yo elijo bogofilter. Previamente he creado una carpeta "Correo Basura" en la que enviar el correo que con el icono "Basura" selecciono como tal. El programa conforme me llegan correos y los selecciono como basura va aprendiendo poco a poco y al final el solo envía a la carpeta correspondiente el correo que considera basura.

Marcar el correo seleccionado actualmente (%f ) como “no spam” usando Bogofilter.: bogofilter -n -v -B "%f"
Marcar el correo seleccionado actualmente (%f ) como “spam” usando Bogofilter: bogofilter -s -v -B "%f"
Orden de clasificación: bogofilter -I



== Buzón Remoto: Con un click en su icono, permite conectarse al servidor ( buzón remoto pop3 ) de la cuenta que tengamos como predeterminada en ese momento ( se puede cambiar desde -> Configuración -> Cambiar la cuenta actual) , y desde él, sin recibir el correo en nuestro pc, borrar directamente el correo que no queramos recibir.




==  Crear filtros: Desde -> Configuración -> Preferencias de filtrado -> añadir Regla de filtrado , se permite crear reglas de filtrado de los mensajes en función de su procedencia, asunto, etc y realizar varias acciones con ellos: enviarlos a la carpeta "papelera", borrarlos, borrarlos del servidor, etc.


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

III- Enviar correo a varios destinatarios de nuestra agenda de direcciones:

- Abrimos la Pantalla Componer ( haciendo click en el botón Componer de la barra de herramientas ),
- Elegimos la cuenta de usuario desde ( campo "Desde" ) la que vamos a enviar el mensaje,
- Ponemos el cursor del ratón sobre el campo "Para"
- Abrimos  la Agenda de direcciones



- Elegimos las direcciones de los destinatarios del mensaje a los que queremos enviarlo
- Hacemos click en Agenda de Direcciones-Dirección-Añadir a destinatario o hacemos Ctrl+M
- Cerramos la Agenda de direcciones
- Ya se han añadido al campo "Para" ( de la Pantalla Componer ) las direcciones de los destinatarios, separadas por una coma y un espacio.



( Si a quienes queremos mandar los correos no están en la Agenda de Direcciones, o bien las añadimos y hacemos los pasos indicados, o las ponemos a mano en el campo "Para" con el siguiente formato: nombre-1@cuenta-1, nombre-2@cuenta-2, nombre-3@cuenta-3,  - es decir las direcciones de los destinatarios separadas por una coma y un espacio - )



- Podemos escribir el texto del mensaje, poner el nombre - asunto - del mensaje, añadir archivos adjuntos, etc  rellenando los otros campos de la Pantalla Componer, y enviar el mensaje

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

IV- Copia de Seguridad:

Un motivo por el que me he pasado de Thunderbird a Sylpheed es que éste guarda en dos carpetas distintas y bien delimitadas, por una parte la configuración del programa, y por otra los correos recibidos, guardados, etc, con lo que es mas fácil guardar y recuperar una copia de seguridad de ambas cosas o de solo una de ellas.


- Los archivos de la configuración del programa se guardan en /home/usario/.sylpheed-**  (los asteriscos variaran en función de la versión del programa, en la actualidad es .sylpheed-2.0), ésta es por tanto la carpeta que hay que copiar/restaurar. Desde la terminal, con la orden tar cvf backup-sylpheed.tar /home/usuario/.sylpheed-2.0 , podemos crear el archivo comprimido backup-sylpheed.tar como copia de seguridad de la configuración del programa.

- Los archivos de  los correos guardados, enviados, etc se guardan en /home/usuario/Mail, ésta es por tanto la carpeta que hay que copia/restaurar. Desde la terminal, con la orden: tar cvf backup-mail.tar /home/usuario/Mail , podemos crear el archivo comprimido backup-mail.tar como copia de seguridad de los correos.

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

En este tema explico como usar Sylpheed desde fuera de la carpeta del usuario

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

jueves, 2 de diciembre de 2010

Crontab: Programar/Automatizar tareas repetitivas

Imagina que quieres programar una tarea para que se ejecute periódicamente, o en un determinado momento. Por ejemplo, hacer una copia de seguridad de tus archivos el dia 1 de cada mes, o cambiar el fondo de escritorio cada 30 minutos. Para programar tareas en Linux, existe un servicio llamado “cron“.

Servicio cron:

¿Que hace este servicio?
Es un proceso que lee un fichero crontab , donde le indicamos las tareas y cuando queremos realizarlas y el se encarga de ejecutarlas por nosotros en el preciso momento que le hayamos indicado ( pero hay que tener en cuenta que si el pc está apagado en el momento en que la tarea fue programada, entonces esta no será ejecutada por cron, ni siquiera luego una vez que se haya encendido el sistema ya que su tiempo de ejecución expiró.) .

( Existen utilidades gráficas para programar/automatizar tareas, como son Kcron (en KDE) , o Grontab y Gnome-Schedule (en Gnome), con las que puedes hacer lo mismo que se explica en este tema; si las usas con que hagas los primeros tres pasos de "Creación de un crontab para un usuario", y leas la sección "sintaxis de contrab" te será suficiente para aprender a manejarte con ellas ) .

Si queremos definir una nueva tarea para cron podemos ejecutar en la terminal el comando crontab , el cual admite los siguientes parámetros:
$ crontab instala el fichero indicado como fichero crontab del usuario
$ crontab -e para editar este fichero de tareas que lee el servicio “cron”  Al ejecutar este comando se abre el editor nano.
$ crontab -l para mostrar un listado de las tareas actuales del usuario.
$ crontab -r elimina el fichero crontab del usuario ( es decir no usar este comando, ya que si se usa habría que volver a crear el archivo crontab del usuario )

Para impedir que un usuario utilice cron o mejor dicho el comando crontab, basta con agregar su nombre de usuario al archivo /etc/cron.deny .Para permitirle su uso entonces sería agregar su nombre de usuario en /etc/cron.allow, si por alguna razón se desea negar el uso de cron a todos los usuarios, entonces se puede escribir la palabra ALL al inicio de /etc/cron.deny .

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

Creación de un crontab para un usuario:

La opción que nos interesa usar para la creación de tareas principalmente es crontab -e, para ello tenemos primero que crear un archivo crontab para cada usuario ( naturalmente hacemos esto desde cada sesión de un usuario ), y con cada usuario el archivo cron-usuario llevara el nombre del usuario ):
1-Primero creamos con gedit un archivo de texto, con el texto:
SHELL=/bin/bash
DISPLAY=:0
2-Guardamos este archivo con el nombre: cron-usuario , en el directorio /home/usuario
3- En la terminal ejecutamos: crontab cron-usuario ( luego si quieres ya puedes borrar el archivo de texto cron-usuario). Al ejecutar dicho comando se crea un archivo con el nombre del usuario en /var/spool/cron/crontabs/ ; Este archivo no se debe editar directamente, sino a través de la ejecución del comando crontab -e en la terminal.
4- A partir de ahí puedes ejecutar en la terminal: crontab -e , e ir añadiendo las lineas necesarias para que se ejecuten programas, comandos o scripts, como se explica en las secciones siguientes.
5-Al ejecutar la orden crontab -e en la terminal se abre el editor nano: una vez añadida la/s linea/s, que queremos programar como tarea/s, para guardar los cambios se da a la tecla F3, luego a la tecla Intro, y para salir del editor nano, se da a la tecla F2, y luego cerramos la terminal.  Se pueden añadir tantas lineas como se quiera para ejecutar tantas tareas como se deseen.

Con permisos de root se puede editar los crontabs de cualquier otro usuario tecleando: sudo crontab -e -u nombre_del_usuario

Programar/Automatizar una tarea para un  comando:

Si queremos que el comando (por ejemplo: tar cvf backup-firefox.tar /home/usuario/.mozilla , que nos crearía un archivo comprimido como copia de seguridad de toda la configuración del navegador firefox) lo ejecute un usuario, en la terminal ponemos: crontab -e , se abre el editor nano, añadimos el comando y lo guardamos y cerramos nano, como indicamos arriba. La nueva tarea se guardará en el archivo: /var/spool/cron/crontabs/usuario ( para las tareas que quieras que ejecute el usuario ). Este archivo no se debe editar directamente, sino a través de la ejecución del comando crontab -e en la terminal.

Si tienes varios usuarios, para que con cada uno de ellos puedas tener tareas programadas/automatizadas, tienes que realizar los pasos anteriores, ( desde la sesión de usuario correspondiente ) cambiando usuario por el nombre de cada uno de ellos.

Si queremos que el comando se ejecute con permisos de root ( es decir con sudo delante del comando ), en la terminal ponemos: sudo crontab -e , se abre el editor nano, añadimos el comando, y lo guardamos, y cerramos nado como indicamos arriba. La nueva tarea se guardará en el archivo: /var/spool/cron/crontabs/root ( para las tareas que quieras que ejecuten con permisos de root ). Este archivo no se debe editar directamente, sino a través de la ejecución del comando sudo crontab -e en la terminal.

Como puedes ver en /var/spool/cron/crontabs/ habrá tantos archivos con nombres de usuarios, como usuarios que vayan a ejecutar tareas programadas.

Sintaxis de contrab:

Todos estos ficheros de crontab siguen la misma sintaxis. En ellos tenemos una línea por cada tarea o acción a ejecutar y esta línea tiene la siguiente sintaxis:

minutos horas dia-mes mes dia-semana comando

El valor que puede tomar cada campo es como sigue:

- minutos: va de 0 a 59 y representa el minuto en que se ejecuta
- horas: va de 0 a 23 y representa la hora en que se ejecuta
- dia-mes: va de 1 a 31 y es el dia del mes en que se ejecuta
- mes: va de 1 a 12 y representa el mes que se ejecuta
- dia-semana: va de 0 a 7 y el el dia de la semana en que se ejecuta (el domingo se puede indicar con el 0 o con el 7, el lunes es 1, martes 2, etc)
- comando: es el comando a ejecutar (un comando o la ruta a un shell script que queramos ejecutar. )

Con un asterisco * se indica todo es decir todos los minutos, o todos los meses, o todos los dias.
‎También se admiten rangos en los campos:
un guión - significa: 0-15 -> un intervalo de valores: todos los valores de 0 hasta 15
una coma , indica: 15,30,45 -> unos valores determinandos: solo esos tres valores: 15, 30 y 45
una barra / indica: 1-10/2 -> un incremento de valores: valores en incremento de 2 en 2 , empezando desde 1, es decir: 1,3,5,7,9

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

Esquema de la sintaxis del comando crontab:



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

Ejemplos: ( se omite el comando que se ejecutaría siguiendo las instrucciones dadas por los campos anteriores a él ):

0 1 * * * *    Se ejecuta al minuto 1 de cada hora de todos los días
15 8 * * *    A las 8:15 a.m. de cada día
15 20 * * *    A las 8:15 p.m. de cada día
00 5 * * 0    A las 5 a.m. todos los domingos
* 5 * * 0    Cada minuto de 5:00a.m. a 5:59a.m. todos los domingos
45 19 1 * *    A las 7:45 p.m. del primero de cada mes
01 * 20 7 *    Al minuto 1 de cada hora del 20 de julio
10 1 * 12 1    A la 1:10 a.m. todos los lunes de diciembre
00 12 16 * 3    A las 12h de los días 16 de cada mes y que sea Miércoles
30 9 20 7 4    A las 9:30 a.m. del dia 20 de julio y que sea jueves
30 9 20 7 *    A las 9:30 a.m. del 20 de julio de cualquier día de la semana
20 * * * 6    Al minuto 20 de cada hora de los sábados
20 * * 1 6    Al minuto 20 de cada hora de los sábados de enero
--------------------
--   59 11 * 1-3 1,2,3,4,5    A las 11:59 de lunes a viernes, de enero a marzo
--  45 * 10-25 * 6-7    Al minuto 45 de todas las horas de los días 10 al 25 de todos los meses y que el día sea sábado o domingo
--  10,30,50 * * * 1,3,5    En el minuto 10, 30 y 50 de todas las horas de los días lunes, miércoles y viernes
--  */15 10-14 * * *    Cada quince minutos de las 10:00a.m. a las 2:00p.m.
--  * 12 1-10/2 2,8 *    Todos los minutos de las 12h, en los días 1,3,5,7 y 9 de febrero y agosto. (El incremento en el tercer campo es de 2 y comienza a partir del 1)
--  0 */5 1-10,15,20-23 * 3    Cada 5 horas de los días 1 al 10, el día 15 y del día 20 al 23 de cada mes y que el día sea miércoles
--  3/3 2/4 2 2 2    Cada 3 minutos empezando por el minuto 3 (3,6,9, etc.) de las horas 2,6,10, etc (cada 4 horas empezando en la hora 2) del día 2 de febrero y que sea martes

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

Podemos programar tareas que se ejecuten cada hora, o cierto dia del mes, o todos los meses, o todos los dias, o solo los sábados, o miércoles, etc.
Todo depende de la combinación de valores que pongas en esos campos.
Así que, todas esas tareas periódicas que realizas ocasionalmente (un script para que me limpie de ficheros no necesarios, copias de seguridad, recordatorios, etc) podrían ser programados para ejecutarse de manera automática.

----------------
Programar/Automatizar una tarea para un  script:

En la linea de “comando” del cron ( al ejecutar crontab -e ) no solo puedes poner un comando, también puedes crear un shell script que haga lo que tu quieras y después lo ejecutas como tarea programada con contrab. Podría ser algo como esto:

15,30,45 11-12 1,2,3 * * /home/usuario/Scripts/cambiar_wallpaper.sh ( hay que poner la ruta entera del directorio donde esta guardado el script )   que significa: cada dia 1,2 y 3 de todos los meses, a las 11h y 12h y 15, 30 y 45 minutos ejecuta el script: /home/usuario/scripts/cambia_wallpaper.sh

Como antes, si el script queremos que lo use root debemos ejecutar: sudo crontab -e , y editar el archivo que se abre.

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

Programar/Automatizar una tarea para un programa gráfico:

Cron ejecuta comandos (en principio) que no impliquen una salida por entorno gráfico, pero después de haber creado el archivo: cron-usuario con el texto que se indica mas arriba ( en la sección "crear un crontab para un usuario" ), y de haber ejecutado en la terminal: crontab cron-usuario , ya podemos editar con contrab -e y añadir la linea correspondiente, poniendo como comando el nombre del archivo ejecutable, por ejemplo:
20 15  * * *  sylpheed  haría que el programa de correo se abriera todos los dias a las 15h 20 minutos.

Editado ( 3-1-2011) : si para ejecutar un programa gráfico solo ponemos su ejecutable la tarea lanzará el programa con su interfaz en inglés, para que se lance el programa con la interfaz en español hay que poner: LANG=es_ES.utf8 ejecutable ; en el ejemplo, si como ejecutable ponemos: firefox, se ejecuta el programa en ingles, si ponemos: LANG=es_ES.utf8 sylpheed , si que se ejecuta el programa en español.

Editado (6-1-2011): Para los que vivan fuera de España escribir en un terminal:  set | grep LANG
Saldrá por ejemplo LANG=es_AR.utf8 para los que vivan en Argentina.
usuario@mint ~ $ set | grep LANG
GDM_LANG=es_AR.utf8
LANG=es_AR.utf8
usuario@mint ~ $

En el ejemplo habría que poner, si vives en Argentina,  LANG=es_AR.utf8 sylpheed  .El idioma que aparece al ejecutar el comando varia en función de la lenguna ( o la variante del Español ) en la que iniciemos el sistema.

Como antes, si el programa gráfico queremos que lo use root debemos ejecutar: sudo crontab -e y editar el archivo que se abre.

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

Un ejemplo, a modo de chuleta o recordatorio,  de como seria el texto que aparece al ejecutar contrab -e y que permitiría ejecutar tanto un script, como un programa gráfico o un comando sería:

SHELL=/bin/bash
DISPLAY=:0

# sintaxis: minutos horas dia-mes mes dia-semana comando
# guión - = intervalo de valores
# coma , = valores determinados
# barra / = incremento de valores
# asterisco * = todo
# ejemplo para ejecutar un script
20 17 * * * /home/usuario/Scripts/cambiar_wallpaper.sh
# ejemplo para ejecutar un programa gráfico
20 15 * * * LANG=es_ES.utf8 sylpheed
# ejemplo para ejecutar un comando
32 17 * * * tar cvf backup-firefox.tar /home/usuario/.mozilla

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

Este tema lo he podido escribir gracias a la inestimable y desinteresada ayuda tanto de Miguel k3b - usuario de http://foro-ubuntu-guia.blogspot.com/ , como de Sanatas -usuario de Guadalinex  http://www.guadalinex.org/participa/foros/foro/25 - ( puestos por su orden alfabético ), a los que desde aquí agradezco su amabilidad y paciencia conmigo.

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