Tareas Programadas (Cron Jobs) y Procesos en Segundo Plano
Aprende a programar ejecuciones automáticas desatendidas (Cron Jobs) en Alwaysdata para realizar tareas de mantenimiento, envío de emails y respaldos.
¿Qué es un Cron Job en Backend?
En una aplicación real, no todas las acciones ocurren cuando un usuario hace clic en el navegador. Existen tareas recurrentes que deben ejecutarse en segundo plano a horas específicas:
- Cancelar reservas o carritos de compra abandonados hace más de 24 horas.
- Enviar un resumen diario por correo a los administradores a las 08:00 AM.
- Respaldar automáticamente la base de datos MariaDB todas las noches a las 02:00 AM.
En la mayoría de servidores gratuitos estas tareas están estrictamente bloqueadas. Alwaysdata incluye un programador de tareas Cron completo accesible en su panel.
Cómo Configurar una Tarea Programada en Alwaysdata
- En el menú lateral, dirígete a Tasks ➔ Scheduled tasks.
- Haz clic en Add a scheduled task.
-
Command (Comando a ejecutar): Escribe la llamada al binario de PHP o Python con la ruta absoluta de tu script:
php /home/tu_cuenta/scripts/limpieza-diaria.php -
Frecuencia (Frequency): Puedes elegir presets cómodos (Every hour, Every day at midnight) o definir una expresión Cron clásica (ej:
0 2 * * *para las 2:00 AM todos los días). - Guarda los cambios con Submit.
Buenas Prácticas para Scripts de Cron
$_SERVER['HTTP_HOST'] no existen. Asegúrate de usar rutas absolutas (__DIR__) y registrar la salida mediante echo o error_log() para auditar el funcionamiento.
⚡ Script PHP de Mantenimiento y Limpieza Diaria (CLI)
Guarda este script en /home/tu_cuenta/scripts/limpieza-diaria.php para que Cron lo ejecute cada noche:
<?php
declare(strict_types=1);
/**
* Script de Mantenimiento Automatizado - Kilopolis Backend
* Ejecución programada vía Cron: php /home/tu_cuenta/scripts/limpieza-diaria.php
*/
// Asegurar que solo se ejecute desde la consola (CLI)
if (php_sapi_name() !== 'cli') {
die("Acceso denegado: Este script solo puede ejecutarse mediante Cron / CLI.\n");
}
echo "[" . date('Y-m-d H:i:s') . "] 🚀 Iniciando tarea programada de mantenimiento...\n";
// 1. Cargar la conexión privada a MariaDB
require_once __DIR__ . '/../config/database.php';
try {
$pdo = new PDO(
'mysql:host=mysql-tu_cuenta.alwaysdata.net;dbname=tu_cuenta_academia;charset=utf8mb4',
'tu_cuenta_app',
'TuPasswordSegura2026',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
// 2. Eliminar registros temporales de sesiones expiradas hace más de 7 días
$sql = "DELETE FROM sesiones_activas WHERE ultima_actividad < NOW() - INTERVAL 7 DAY";
$eliminados = $pdo->exec($sql);
echo "[" . date('Y-m-d H:i:s') . "] Se eliminaron {$eliminados} sesiones inactivas correctamente.\n";
} catch (PDOException $e) {
echo "[" . date('Y-m-d H:i:s') . "] ❌ Error en la base de datos: " . $e->getMessage() . "\n";
exit(1);
}
echo "[" . date('Y-m-d H:i:s') . "] 🏁 Tarea finalizada con éxito.\n";
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección¿Cuál es el comando correcto para configurar en una tarea programada de Alwaysdata que ejecute un archivo PHP ubicado en /home/tu_cuenta/scripts/tarea.php?
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.🚀 ¿Quieres dominar Manual de Alwaysdata: Cloud Hosting & Despliegue Backend y crear proyectos reales?
Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.
🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.