El proceso "cron" de Moodle es un script PHP (parte de la instalación base) que debe ser ejecutado a intervalos regulares. Este script lleva a cabo diferentes tareas programadas en diferentes intervalos de tiempo (enviar mails, actualizar reportes de Moodle, RSS feeds, completitud de actividades y notificaciones de mensajes en foros, entre otras). Es importante que este proceso se configure correctamente, de lo contrario el sitio Moodle no funcionará de forma adecuada.
En sistemas operativos de la familia Unix (Linux, *BSD), este script se programa desde cron
, por ejemplo en el crontab del usuario con el que corre Apache (www-data
en Debian y derivados). Debido a que diferentes tareas tienen intervalos de tiempo diferentes, no todas se ejecutan cada vez que se dispara el script cron.php
desde cron
.
Un administrador del sitio puede programar tareas de forma precisa desde el menú "Administration > Site administration > Server > Scheduled tasks" en el sitio. Pero también existe la herramienta de línea de comandos schedule_task.php
la cual se encuentra dentro del directorio admin/tool/task/cli
:
root@moodle:~# su www-data -c '/usr/bin/php /var/www/moodle/admin/tool/task/cli/schedule_task.php' Scheduled cron tasks. Options: --execute=\\some\\task Execute scheduled task manually --list List all scheduled tasks -h, --help Print out this help Example: $sudo -u www-data /usr/bin/php admin/tool/task/cli/scheduled_task.php --execute=\\core\\task\\session_cleanup_task
Tal como se observa en la ayuda, esta herramienta permite listar y ejecutar tareas programadas.
Cómo listar las tareas programadas de Moodle
Para listar todas las tareas programadas, junto con sus respectivos intervalos (utiliza la misma sintaxis que cron
) y fechas estimadas para las próximas ejecuciones de cada una, utilizar el comando --list
.
php /var/www/moodle/admin/tool/task/cli/schedule_task.php --list
Por ejemplo:
root@moodle:~# su www-data -c '/usr/bin/php /var/www/moodle/admin/tool/task/cli/schedule_task.php --list' == List of scheduled tasks (https://moodle.linuxito.com) == \logstore_legacy\task\cleanup_task * 5 * * * * martes, 10 de mayo de 2016, 05:02 \logstore_standard\task\cleanup_task * 4 * * * * martes, 10 de mayo de 2016, 04:01 \core\task\automated_backup_task 50 * * * * * lunes, 9 de mayo de 2016, 09:50 \core\task\backup_cleanup_task 10 * * * * * lunes, 9 de mayo de 2016, 10:10 \core\task\badges_cron_task */5 * * * * * lunes, 9 de mayo de 2016, 09:35 \core\task\blog_cron_task * * * * * * ASAP \core\task\cache_cleanup_task 30 * * * * * lunes, 9 de mayo de 2016, 10:30 \core\task\cache_cron_task 50 * * * * * lunes, 9 de mayo de 2016, 09:50 \core\task\calendar_cron_task * * * * * * ASAP \core\task\check_for_updates_task 0 */2 * * * * lunes, 9 de mayo de 2016, 10:00 \core\task\completion_cron_task * * * * * * ASAP \core\task\context_cleanup_task 25 * * * * * lunes, 9 de mayo de 2016, 10:25 \core\task\create_contexts_task 0 0 * * * * martes, 10 de mayo de 2016, 00:00 \core\task\delete_incomplete_users_task 5 * * * * * lunes, 9 de mayo de 2016, 10:05 \core\task\delete_unconfirmed_users_task 0 * * * * * lunes, 9 de mayo de 2016, 10:00 \core\task\events_cron_task * * * * * * ASAP \core\task\file_temp_cleanup_task 55 */6 * * * * lunes, 9 de mayo de 2016, 12:55 \core\task\file_trash_cleanup_task 55 */6 * * * * lunes, 9 de mayo de 2016, 12:55 \core\task\grade_cron_task * * * * * * ASAP \core\task\legacy_plugin_cron_task * * * * * * ASAP \core\task\messaging_cleanup_task 35 * * * * * lunes, 9 de mayo de 2016, 09:35 \core\task\password_reset_cleanup_task 0 */6 * * * * lunes, 9 de mayo de 2016, 12:00 \core\task\plagiarism_cron_task * * * * * * ASAP \core\task\portfolio_cron_task * * * * * * ASAP \core\task\question_cron_task * * * * * * ASAP \core\task\registration_cron_task 0 4 * * * * martes, 10 de mayo de 2016, 04:00 \core\task\send_failed_login_notifications_task * * * * * * ASAP \core\task\send_new_user_passwords_task * * * * * * ASAP \core\task\session_cleanup_task * * * * * * ASAP \core\task\stats_cron_task 0 * * * * * lunes, 9 de mayo de 2016, 10:00 \core\task\tag_cron_task 20 * * * * * lunes, 9 de mayo de 2016, 10:20
Las fechas para las próximas ejecuciones son estimadas, no precisas, porque dependen del período con el cual se ejecuta el script cron.php
. Si éste se ejecuta con un período mayor a 1 minuto (por ejemplo cada 10 minutos), las tareas programadas cuya próxima ejecución no coincida con un ciclo serán ejecutadas en el ciclo inmediato siguiente. En este caso es común ver la sigla ASAP (as soon as possible, "lo antes posible" en inglés) en la tercer columna para aquellas tareas que se deben ejecutar una vez por minuto (* * * * * *
).
Cómo ejecutar una tarea programada de forma manual
Si se necesita correr manualmente una tarea programada, se debe utilizar el comando --execute
con la siguiente sintaxis:
php /var/www/moodle/admin/tool/task/cli/schedule_task.php --execute=TAREA
Por ejemplo:
root@moodle:~# su www-data -c '/usr/bin/php /var/www/moodle/admin/tool/task/cli/schedule_task.php --execute=\\core\\task\\session_cleanup_task' Scheduled task: Limpiar sesiones antiguas ... used 86 dbqueries ... used 0.23355317115784 seconds Task completed.
El nombre de la tarea se obtiene de la salida del comando --list
. Tal como se observa, es necesario utilizar barras invertidas dobles.
Referencias
man cron man crontab