A veces necesitamos que nuestro servidor realice tareas de forma automática cada cierto tiempo, estas tareas se configuran con la herramienta crontab.
Cada usuario del sistema tiene su propio crontab a cual puede verse con crontab -l y puede editarse con crontab -e. Si somos root podremos editar el crontab de cualquier usuario añadiendo simplemente -u y el usuario.
crontab -u usuario21 -e #con esto editamos el cron de usuario21 crontab -u usuario21 -l #con esto visualizamos el cron de usuario21
Para escribir una tarea en el crontab tenemos que seguir el siguiente formato:
* * * * * comando > salida
Esos 5 asteriscos que van antes del comando son por este orden:
- Minutos: desde 0 al 59.
- Horas: desde las 0 a las 23.
- Día del mes: desde el 1 al 31.
- Mes: desde el 1 al 12.
- Día de la semana: desde 0 (domingo) hasta el 6 (sábado).
Así pues si quisiéramos que se ejecutara un comando a las 3 y cuarto de la mañana los sábados de Febrero pondríamos lo siguiente:
15 3 * 2 6 comando > salida
Parece un poco confuso, este formato lo que hace es ejecutar si se cumplen todas las condiciones. Si os fijáis lo único que hemos hecho ha sido cambiar cada asterisco por su correspondencia, excepto el tercero que son los días del mes que hemos dicho todos. Esto se ejecutará cuando el reloj tenga los minutos en 15, la hora en 3, cualquier día del mes, en el mes de Febrero y que sea sábado.
Ahora vamos a ir un poco más allá, queremos que se ejecute a la 1 de la mañana y a las 4 de la tarde los martes:
0 1,16 * * 2 comando > salida
Hay que fijarse que hemos puesto ahora una coma, para decir a la 1 de la mañana y a las 4 de la tarde (las 16 horas).
Y ahora vamos a ir un poco más allá, queremos que el comando se ejecute cada 15 minutos, pero solo a la 1 de la mañana y a las 4 de tarde los sábados.
*/15 1,16 * * 6 comando > salida
Ahora además de la coma tenemos un /, esto significa cada 15, si quisieramos que fuera cada 2 pondríamos /2 y así todo el rato.
Y si ahora queremos que lo haga cada 15 minutos, pero empezando en el minuto 0 lo que haríamos sería:
0/15 1,16 * * 6 comando > salida
Al final es simplemente pillarle el tranquillo a esto, un último ejemplo, queremos que se ejecute cada dos días a las 2 y 10 de la mañana
10 2 */2 * * comando > salida
Por supuesto a partir de aquí podemos avanzar mucho más diciendo que se ejecute de forma anual @yearly, etc.. hay muchas más posibilidades, pero para un funcionamiento estándar aquí tenéis lo que necesitáis.
En cuanto al comando no es más que el comando que queráis ejecutar, por ejemplo:
10 2 */2 * * php /srv/www/midominio.tld/www/holacaracola.php
Muy importante es siempre introducir el path completo en el crontab, esto nos va a ahorrar muchos dolores de cabeza y problemas futuros, recordad, siempre el path completo.
Y por último la salida, lo cual es muy importante, lo ideal es terminar con > /dev/null 2>&1, que viene a significar que no saque ni resultado ni error. Esto si lo desglosamos podemos leerlo así:
> es la redirección /dev/null los datos se enviarán a /dev/null, es decir, a un agujero negro 2 Indica el descriptor de la Standard Error > es la redirecciónb & Este símbolo indica que es un descriptor y no un fichero 1 Es el descriptor para la Standard Out
Para configurar el crontab en Neodigit es realmente fácil, hay que ir al alojamiento que tengamos, ya sea alojamiento suelto o esté en un multidominio o servidor cloud con panel, y ahí pincharemos en el botón alojamiento y la última opción es «Tareas de cron», así de fácil y sencillo.
Al entrar en Tareas de cron obtendréis la siguiente pantalla donde podréis introducir vuestro crontab.
Gracias Eduardo, Lo he conseguido hacer funcionar gracias a esta publicación. A ver si ahora sé sacarle partido.
(Te informo que las imágenes de tu artículo han «desaparecido»)