El problema
Has configurado una o varias tareas cron que llaman a una URL de tu web (por ejemplo, para regenerar el sitemap, lanzar la indexación de un módulo o ejecutar un proceso programado) usando wget, pero no se ejecutan: el proceso parece saltar (se crea el fichero de log, pero queda vacío) y la tarea no surte efecto. Curiosamente, si lanzas el mismo comando en tu equipo local sí funciona.
Esto es muy habitual cuando la URL que llamas incluye parámetros o un token, por ejemplo:
https://www.tudominio.com/ruta/script.php?token=xxxxxxxx&id=1
Por qué ocurre
En estos casos, wget no es la herramienta más adecuada. Cuando la URL contiene una cadena de parámetros (un token, un identificador, etc.) detrás de un signo de interrogación, la llamada puede no procesarse correctamente y el script de destino no llega a ejecutarse, sin dejar rastro claro en el log. Que en local funcione no significa que falle el servidor: simplemente la forma de invocar la URL no es la idónea para una petición con parámetros.
La solución: usa curl con un User-Agent
Sustituye wget por curl indicando un User-Agent. Esta es la forma recomendada para ejecutar una URL con token o parámetros desde una tarea cron en nuestros servidores:
/usr/bin/curl --user-agent cPanel-Cron "https://www.tudominio.com/ruta/script.php?token=xxxxxxxx"
Ten en cuenta lo siguiente:
Encierra siempre la URL completa entre comillas dobles. Así te aseguras de que el signo
&que separa los parámetros no se interprete como un operador del sistema.El parámetro --user-agent identifica la petición y evita que algunas peticiones automáticas sin identificar sean descartadas.
La ruta absoluta de curl en nuestros servidores es
/usr/bin/curl.
Recomendaciones adicionales para tus tareas cron
No programes muchas tareas en un intervalo muy corto. Si configuras varias tareas cron separadas por pocos minutos y cada proceso tarda en completarse, es posible que unas se solapen con otras y se "pisen", provocando que ninguna termine bien. Espacia las ejecuciones lo suficiente para que cada una pueda finalizar antes de que arranque la siguiente.
Mantén actualizados tus módulos. Si la tarea cron dispara un proceso de un módulo o plugin (por ejemplo, la generación de sitemap o la indexación de búsqueda por facetas en una tienda), asegúrate de tener la última versión: las versiones antiguas pueden tener problemas de seguridad o de rendimiento que afectan a estos procesos.
Evita acumular ficheros en tu cuenta. Si solo necesitas que la URL se ejecute y no quieres guardar la respuesta, no es necesario almacenar la salida. Con curl puedes descartarla añadiendo
-s -o /dev/nullal comando.
Si sigues teniendo problemas
Si tras cambiar a curl la tarea continúa sin ejecutarse, abre un ticket desde tu Área de Clientes indicando el dominio afectado, la línea exacta del cron que estás usando (puedes ocultar el token) y qué proceso debería lanzar. Así el equipo podrá revisar los registros del servidor y confirmar qué está ocurriendo.
