You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moodle 4.1+ cron任务执行失败问题求助

解决Moodle CLI Cron脚本数据库连接失败问题

问题概述

Moodle系统运行正常(可创建课程、安装插件),但执行admin/cli/cron.php时出现异常:

  • 命令行执行报错:
    !!! <p>Error: Database connection failed</p>
    <p>It is possible that the database is overloaded or otherwise not running properly.</p>
    <p>The site administrator should also check that the database details have been correctly specified in config.php</p> !!!
    
  • 浏览器执行报错:Command line scripts can not be executed from the web interface

关键说明

浏览器执行CLI脚本的报错是Moodle的设计限制,CLI脚本仅允许通过命令行环境运行,无需针对此报错处理,重点解决命令行的数据库连接问题。

解决方案

  • 检查命令行PHP的数据库扩展
    命令行PHP与Web环境的PHP可能使用不同配置文件,导致未加载必要的数据库扩展。执行以下命令查看已加载的扩展:

    php -m
    

    确认输出中包含mysqli或pdo_mysql(对应Moodle使用的数据库驱动)。若缺失,需编辑命令行PHP的php.ini文件,启用对应扩展(移除extension=mysqli或extension=pdo_mysql前的注释符号)。

  • 验证数据库连接参数与Socket配置

    1. 确认config.php中的数据库参数(主机、用户名、密码、库名)完全正确(Web环境正常运行已验证参数本身无误,但需注意命令行环境的特殊情况)。
    2. 若数据库主机设为localhost,命令行PHP可能使用Unix socket连接,需确保php.ini中mysqli.default_socket或pdo_mysql.default_socket的路径与数据库配置的socket路径一致(可通过mysql --help查看数据库默认socket路径)。
  • 指定Web环境的PHP配置执行脚本
    若命令行PHP配置存在问题,可临时指定使用Web环境的php.ini来运行cron脚本:

    php -c /path/to/web/php.ini admin/cli/cron.php
    

    (替换/path/to/web/php.ini为实际路径,比如Apache环境下可能是/etc/php/7.4/apache2/php.ini)

  • 检查命令行用户的数据库访问权限
    运行cron脚本的系统用户(如www-data、apache或执行命令的登录用户)需具备数据库访问权限。执行以下命令测试连接:

    mysql -u [db_username] -p [db_name]
    

    输入数据库密码后若无法登录,需通过数据库管理工具给该用户授予对应数据库的访问权限。

  • 重启数据库服务
    若以上步骤无效,尝试重启数据库服务(如MySQL/MariaDB),排除临时的数据库连接异常:

    # MySQL/MariaDB 重启命令(根据系统调整)
    systemctl restart mysql
    

内容的提问来源于stack exchange,提问作者AdrianoLeal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 16:52:14