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配置
- 确认
config.php中的数据库参数(主机、用户名、密码、库名)完全正确(Web环境正常运行已验证参数本身无误,但需注意命令行环境的特殊情况)。 - 若数据库主机设为
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
相关产品推荐
相关产品推荐

