Creación de Tareas Programadas en Yii2 (Comandos de Consola)

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.

Etiquetas: yii2 console-commands cron scheduled-tasks PHP

Publicado el 6-26 00:40