Programar tareas Crontab: realizando tareas periódicas El comando crontab permite programar tareas para realizarlas a ciertas horas, ciertos días de la semana, del mes, del año, etc. Todo ello siguiendo una sintaxis muy sencilla. Con este comando, cada usuario puede definir sus propias tareas programadas. Su sintaxis básica es la siguiente: crontab -l Mostrar las tareas programadas por el usuario. crontab -e Editar el fichero crontab. Con esto editaremos el fichero de configuración de crontab de cada usuario para poder modificar las tareas programadas. crontab -r Eliminar el fichero crontab corriente. crontab -u <usuario> Aplicar una de las opciones anteriores para un usuario determinado. Sólo siendo root puede hacerse. Editando nuestro fichero crontab Cuando hacemos un crontab -e procedemos a editar nuestro fichero crontab con el editor que tengamos definido, se utilizará el editor vi. El fichero de crontab tiene una sintaxis específica que deberemos seguir. Introduciremos una línea para cada tarea que queramos programar. Cada línea se compone de seis campos separados por espacios; estos campos son, en orden: minuto, hora, dia, mes, año, comando. Si hacemos esto , hacemos un fichero como el siguiente (las líneas que comienzan por # son comentarios y no afectan): # Cada Navidad reproducir una melodía 0 0 25 12 * mpg123 ~/musica/feliz_navidad.mp3 # Hacer una copia de seguridad del directorio documentos cada día a las 00:00 0 0 * * * tar -czf docs-`date -I`.tar.gz ~/documentos/ ( el símbolo ~ es equivalente a $HOME, y a /home/usuario/) Como podemos ver , esta sintaxis es bastante flexible, y nos permite programar casi cualquier cosa. Además, podemos hacernos nuestros scripts y hacer que crontab los ejecute para tener tareas programadas más complejas. También disponemos de un fichero de crontab para el sistema. Es el fichero/etc/crontab, pero sólo siendo root puede modificarse. At: Ejecutando tareas a cierta hora una sola vez Este comando nos permite ejecutar tareas a una cierta hora solamente una vez. Para ello utilizaremos el comando at <hora>. Por ejemplo: $ at 5:30pm o bien $ at 17:30 Una vez hayamos ejecutado esto nos aparecerá la consola de at para escribir comandos o tareas que queramos que se ejecuten a esa hora, por ejemplo: at> gmessage "Hora de irse!!" Una vez hayamos terminado de introducir los comandos, presionaremos Control + D para salir de at. Podemos especificar la hora de siguientes maneras: now + <intervalo> Donde la sintaxis para el intervalo es: <n> (minutes|hours|days|weeks|months). Por ejemplo así para programar tareas para dentro de 3 horas: $ at now + 3 hours <hora><dia> Para especificar la fecha por completo. El parámetro <hora> es obligatorio. Podemos ingresar valores de la forma 18:00,0600pm, El parámetro <dia> es opcional y podemos especificarlo de las siguientes maneras: 12/23/2005 , 23.12.2005 . Podemos omitir el año, pero entonces sólo podemos usar la notación europea (por ejemplo: 23.12). También podemos especificar el mes abreviado como: dec 23 o bien como 23 dec. Además de esto, at también acepta las siguientes opciones: -l Para mostrar la lista de tareas que tenemos programadas. -d <num_tarea> Para eliminar la tarea que queramos. Cada tarea tiene asociado un número que podemos ver con la opción anterior. Estas son las principales características de at. Para ampliar cualquier información podemos consultar el man: man at. Imaginemos que necesitemos que una vez a la semana se comprima todo un directorio completo y nos cree un fichero en formato tar.gz para tener una copia de seguridad. Ademas vamos a suponer que lo necesitamos todos los días de lunes a viernes a las 4:30 de la mañana … Para comenzar vamos a editar crontab desde una Terminal y ejecutando … sudo crontab -e Editor crontab Como veis el archivo parece complejo pero no tiene mucha complicación una vez lo entendamos. En mi caso necesito hacer una copia de seguridad del directorio /home/servidor/datos y que me lo comprima en el fichero backupweb.tar.gz situado en /home/servidor/datos/Backup-Server para hacer esto simplemente deberíamos ejecutar tar -czf /home/servidor/datos/BackupServer/backupweb.tar.gz /home/servidor/datos/ web pero además de indicarle esto debemos indicarle que minuto, hora, día del mes … Para ello le indicaremos delante del comando de compresión tar lo siguiente … Crontab explicación 30 4 * * 1-5 tar -czf /home/servidor/datos/Backup-Server/backupweb.tar.gz /home/servidor/datos/web Como veis le indico que se ejecute: 1. 30 A la media 2. 4 A las 4 de la mañana 3. * Todos los dias del mes 4. * Todos los meses del año 5. 1-5 De lunes a Viernes (lunes=1; viernes=5) Ahora solo tenemos que reiniciar cron para que los cambios se apliquen. sudo /etc/init.d/cron restart Con esto hemos programado una tarea de forma facil y rápida. Otro ejemplo, seria aplicar cron para borrar un directorio cada 5 minutos. 0-59/5 * * * * rm /var/log/samba/*log.* Con esta orden indicaremos que se borre el directorio de log de samba cada 5 minutos.