Hola Pablo,
PHP tiene una variable de configuración que se llama max_execution_time, que sirve para especificar el número de segundos que un guión puede tardar en acabar. Si se sobrepasa ese límite, PHP automáticamente finaliza la ejecución (que es lo que te está pasando a tí).
Esto es para evitar que un guión incorrecto pueda estar ejecutándose de forma continua y consuma recursos del servidor de forma permanente.
En Moodle, los guiones que se sabe que van a sobrepasar ese valor (cron, backup...) modifican ese valor para permitir ejecuciones "largas". Pero parece ser que, a parte de esos, en tu servidor hay otras URLs que consumen los 30 segundos.
Para solucionarlo, puedes modificar el valor de dicha variable en el archivo php.ini a 60 segundos, por ejemplo.
Ciao