Cron es un administrador de tareas de Linux que permite ejecutar comandos en un momento determinado, por ejemplo, cada minuto, día, semana o mes. Si queremos trabajar con cron, podemos hacerlo a través del comando crontab.
¿Qué es crontab?
Es un archivo de texto donde se listan todas las tareas que deben ejecutarse y el momento en el que deben hacerlo.
¿Cómo configurar tareas cron manualmente?
Para poder configurar una tarea cron de forma manual, primero tendremos que acceder vía SSH. Una vez hayamos accedido, tendríamos que hacer uso del comando crontab.
A continuación podremos ver las diferentes opciones del crontab:
- crontab -e: edita el archivo crontab de un usuario. Cada línea que se configure será una tarea Cron.
- crontab -l: lista el archivo crontab del usuario, con todas sus tareas configuradas.
- crontab -r: elimina el archivo crontab de un usuario. El borrado no es recuperable.
Para poder abrir y crear un cron, tendríamos que ejecutar el siguiente comando:
crontab -e
La primera vez que abrimos este fichero, tendremos que seleccionar el editor que deseamos utilizar:
dominio-ejemplo@hl123456:~$ crontab -e no crontab for dominio-ejemplo - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny Choose 1-3 [1]:
Una vez seleccionado el editor deseado, se nos abrirá el fichero para poder insertar el cron que deseamos programar.
Formato y sintaxis
El formato de configuración de cron es el siguiente:
Minuto Hora Dia-del-Mes Mes Dia-de-la-Semana Comando-a-Ejecutar
Cómo configurar el momento de ejecución
- El intervalo de tiempo se especifica mediante 5 campos que representan, de izquierda a derecha:
- Minutos: de 0 a 59.
- Horas: de 0 a 23.
- Día del mes: de 1 a 31.
- Mes: de 1 a 12.
- Día de la semana: de 1 a 6 lunes a sábado (1=lunes, 2=martes, etc.) y 0 o 7 el domingo.
Si queremos especificar todos los valores posibles de un parámetro (minutos, horas, etc.) se utiliza un asterisco (*).
Esto implica que si en lugar de un número utilizamos un asterisco, el comando indicado se ejecutará cada minuto, hora, día de mes, mes o día de la semana, como en el siguiente ejemplo:
* * * * * /home/hosting/miscript.sh
Comando a ejecutar
La última columna corresponde al comando que se quiere ejecutar. Recomendamos antes de configurar el comando en la tarea cron comprobar manualmente que ese comando específico funciona correctamente.
NOTA: El símbolo almohadilla «#» es un comentario, todo lo que se encuentre después de ese caracter en la misma línea no será ejecutado por cron.
Algunos ejemplos
Programamos un script que realiza una copia de seguridad todos los días a las 02:00 h de la mañana:
00 02 * * * /home/hosting/backup.sh
Ahora programamos el mismo script que realiza un backup, pero limitado al sábado y al domingo a las 03:00 de la mañana:
00 03 * * 6,7 /home/hosting/backup.sh
En este caso, ejecutamos el script cron.sh todos los miércoles a las 12:20 y guardar la salida en el fichero cron.log:
20 12 * * 3 /home/usuario/cron.sh >> /home/usuario/cron.log
Si queremos indicar dos o más valores en cada parámetro, es necesario separarlos por comas. Por ejemplo, para ejecutar el script cron.sh todos los miércoles a las 12:10 h y a las 12:20 h:
10,20 12 * * 3 /home/usuario/cron.sh
Si queremos indicar que se ejecute el fin de semana cada 15 minutos podemos hacerlo de dos formas diferentes. Como hemos hecho en el ejemplo anterior, con comas:
0,15,30,45 * * * 6,7 /home/usuario/cron.sh
O bien usando la sintaxis */15:
*/15 * * * 6,7 /home/usuario/cron.sh
Este es un ejemplo de ejecución de un fichero PHP cada 15 minutos:
*/15 * * * * /home/usuario/.bin/php /home/usuario/fichero.php
Si queremos que se ejecuten dos comandos, de forma consecutiva, separaremos los comandos con punto y coma:
*/15 * * * 6,7 /home/usuario/cron.sh; /home/usuario/backup.sh
En el ejemplo que figura a continuación, programamos la descarga de un fichero, todos los días, el día 8 de mayo a las 07:15 h:
15 7 8 5 * wget -N http://dominio-ejemplo.com/documentacion.tar.gz
A continuación usaremos el mismo ejemplo, pero la descarga de un fichero solo se realizará el día 8 de mayo a las 07:15 h si ese día coincide que es lunes:
15 7 8 5 1 wget -N http://dominio-ejemplo.com/documentacion.tar.gz
Y ahora configuramos que la descarga del fichero el día 8 de mayo a las 07:15 h se realice solo si coincide de lunes a viernes:
15 7 8 5 1-5 wget -N http://dominio-ejemplo.com/documentacion.tar.gz
Existen varios valores predefinidos que podemos utilizar para sustituir algunas expresiones, evitando tener que configurarlas:
VALOR | TIEMPO DE EJECUCIÓN | EQUIVALENCIA |
@yearly | Una vez al año | 0 0 1 1 * |
@annually | Una vez al año | 0 0 1 1 * |
@monthly | Una vez al mes | 0 0 1 * * |
@weekly | Una vez a la semana | 0 0 * * 0 |
@daily | Una vez al día | 0 0 * * * |
@midnight | Una vez al día | 0 0 * * * |
@hourly | Una vez, cada hora | 0 * * * * |
Configurar tareas cron desde el Panel de Control de dinahosting
Si no quieres configurar a mano tus tareas programadas, puedes hacerlo de forma sencilla y rápida desde tu Panel de Control de dinahosting.