Yii2 dispone de una funcionalidad robusta para ejecutar tareas programadas mediante comandos de consola. En el directorio console dentro de la estructura del proyecto, podemos crear controladores específicos para manejar estas tareas automatizadas.
A continuación, se presenta un ejemplo de controlador para tareas programadas:
<?php
namespace console\controllers;
use yii\console\Controller;
class TareaProgramadaController extends Controller
{
public function actionEjecutar()
{
echo "Ejecutando tarea programada\n";
}
}
Para ejecutar este comando desde la línea de comandos, nos situamos en el directorio raíz del proyecto y ejecutamos:
yii tarea-programada/ejecutar
La nomenclatura sigue un patrón específico: si el controlador se llama NotificacionesController y el método actionEnviarCorreo(), la ejecución sería:
yii notificaciones/enviar-correo
Configuración de Crontab en Linux
Para automatizar la ejecución de estas tareas, utilizamos crontab. A continuación, se muestran los comandos esenciales para su gestión:
Instalación de Crontab
yum install crontabs
Operaciones del Servicio Crontab
# Iniciar el servicio
/sbin/service crond start
# Detener el servicio
/sbin/service crond stop
# Reiniciar el servicio
/sbin/service crond restart
# Recargar configuración
/sbin/service crond reload
Verificar Estado del Servicio
service crond status
Configuración de Inicio Automático
# Método uno: interfaz visual
ntsysv
# Método dos: agregar al inicio del sistema
chkconfig --level 35 crond on
Gestión de Tareas Programadas
Listar todas las tareas programadas:
crontab -l
Editar las tareas programadas:
crontab -e
Este comando abre el archivo /var/spool/cron/root en el editor vim.
Ejemplo: ejecutar un comando cada 5 minutos:
*/5 * * * * echo $(date) >> $HOME/salida.txt
Eliminar todas las tareas programadas:
crontab -r
Para eliminar con confirmación:
crontab -i
Respaldo y Restauración
Crear respaldo de las tareas:
crontab -l > $HOME/mis_tareas_cron
Restaurar tareas desde un respaldo:
crontab <filename>
Donde filename corresponde al archivo de respaldo en el directorio HOME.
Entegración de Yii2 con Crontab
Para ejecutar comandos de Yii2 mediante crontab, es necesario uitlizar la ruta absoluta de PHP. Un ejemplo de configuración sería:
30 21 * * * /usr/local/php/bin/php /ruta/del/proyecto/yii tarea-programada/ejecutar
Este ejemplo ejecuta la tarea programada a las 21:30 horas diariamente.
Ubicación de Logs
Los registros de crontab se encuentran generalmente en:
/var/log/cron.log
/var/log/cron
Sintaxis de Crontab
El formato básico es:
* * * * * comando
Donde cada asterisco representa:
- Primer asterisco: minutos (0-59)
- Segundo asterisco: horas (0-23)
- Tercer asterisco: día del mes (1-31)
- Cuarto asterisco: mes (1-12)
- Quinto asterisco: día de la semana (0-6, donde 0 es domingo)
Ejemplos Prácticos
# Reiniciar servicio a las 21:30 horas
30 21 * * * /usr/local/etc/rc.d/servicio restart
# Reiniciar los días 1, 10 y 22 a las 4:45
45 4 1,10,22 * * /usr/local/etc/rc.d/servicio restart
# Ejecutar cada sábado y domingo a la 1:10
10 1 * * 6,0 /usr/local/etc/rc.d/servicio restart
# Ejecutar cada 30 minutos entre las 18:00 y 23:00
0,30 18-23 * * * /usr/local/etc/rc.d/servicio restart
# Ejecutar cada sábado a las 23:00
0 23 * * 6 /usr/local/etc/rc.d/servicio restart
# Ejecutar cada hora
0 */1 * * * /usr/local/etc/rc.d/servicio restart
Es importante especificar la ruta absoluta del ejecutable PHP para garantizar que las tareas programadas se ejecuten correctamente sin problemas de ruta.