Tabla de contenidos
¿Qué es un Cron Job
Los Cron Jobs o Cron Table son procesos Linux que nos facilitan la creación de tareas repetitivas.
El uso de este sistema nos puede servir para muchísimas cosas dentro del desarrollo web como por ejemplo para hacer backups de nuestra base de datos cada ciertos días, para mandar e-mails con novedades a los usuarios registrados, etc .. En nuestro caso vamos a programar una tarea de eliminación de usuarios de una tabla en el caso de que los usuarios no se hayan activado en un tiempo de 2 dias.
¿Como es la estructura de un Cron Job?
Lo primero que hay que saber es que un Cron Job tiene una estructura de 5 columnas seguido de la ruta y el comando a ejecutar.
Min | Hora | Día | Mes | Dia de la semana | Ruta + comando |
30 | 8 | 15 | * | * | home/path/to/command/delete.sh |
En este ejemplo se ejecutaría el proceso delete.sh los días 15 de cada mes a las 8:30 de la mañana.
Si quisieramos por ejemplo, ejecutarlo el primer día de cada mes a las 10 de la mañana, el código sería el siguiente:
0 | 10 | 1 | * | * | home/path/to/command/delete.sh |
Existen otra serie de operadores que nos servirán para personalizar aun más estos procesos como:
- Comas: Se usa para crear una lista de valores.
- Guiones: Se usa para especificar un rango de valores.
- Asteriscos: Se usa para especificar «todo» o «cada» valor.
Hay que tener en cuenta que Crontab envía por defecto un e-mail de notificación cuando una tarea se ha ejecutado. Esto sin embargo en determinados casos puede no ser necesario para tu tarea, asi que puede evitarse redirigiendo la salida que se realiza con el operador «>».
Siguiendo el ejemplo anterior, vamos a redirigir la salida para la tarea: «Ejecutar delete.sh el primer día de cada mes a las 10 de la mañana»:
0 | 10 | 1 | * | * | home/path/to/command/delete.sh >/dev/null |
Cron Jobs en Php
Para utilizar Cron Jobs en PHP, necesitamos ejecutar comandos en el servidor remoto, para esto, PHP nos proporciona una librería llamada SSH2, aunque puede que esta librería no esté disponible, asi que nos hará falta descargarla desde el siguiente enlace:
PHP libssh2 Instalación / Configuracion
Crear la Clase
Para comernzar, tendremos que crear la clase con los siguientes atributos:
- $connection: Representa la conexión.
- $path: Representa la ruta de este archivo.
- $handle:Representa el nombre de nuestro archivo cron temporal
- $cron_file: Representa la ruta completa y el nombre de nuestro archivo cron.
Los pasos a seguir por la clase son:
- Conectarse y autentificarse como un usuario adecuado para ejecutar comandos y acceder a cronTab.
- Crear un método para controlar la ejecución de los distintos comandos, el nombre de este método será exec()
- Habilitar la escritura de cronTab en un fichero y la opción de eleminar este fichero una vez haya terminado la ejecución. Estos métodos los llamaremos write_to_file() y remove_file().
- Para crear y eliminar los cronJobs utilizaremos los métodos append_cronjob() y remove_cronjob()
- remove_crontab(): Este método nos servirá para eliminar todo el cronTab completo en el caso de que sólo se haya eliminado el último cronJob
- Para ayudarnos a validar un poco nuestro script, utilizaremos crontab_file_exists() con el que nos aseguraremos de que existe el archivo cron temporal, y error_message() con el que mostraremos los errores que puedan surgir.
Una vez tenemos la idea de como crear la clase, estamos preparados para empezar a leer el código que tenemos disponible en Nettuts, donde nos explican claramente cada una de las sentencias, y donde podremos descargar dicha clase y usarla en nuestros proyectos.
Clase para manejar Cron Jobs en PHP
Vía: Nettuts