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

Laravel计划任务调度查询myproj_cache_illuminate:schedule:interrupt失败

解决方案:Laravel Schedule Cron执行时MySQL连接错误(SQLSTATE[HY000] [2002])

问题根源

其他功能正常但Cron执行schedule:run报错,核心原因是CLI环境与Web环境的MySQL连接配置不一致。CentOS 7和Ubuntu 22.04的MySQL默认Socket路径不同:

  • CentOS 7:/var/lib/mysql/mysql.sock
  • Ubuntu 22.04:/run/mysqld/mysqld.sock

Cron执行时使用的CLI环境可能仍在读取旧的Socket路径,导致无法连接MySQL。

具体解决步骤

  1. 确认Ubuntu服务器的MySQL Socket路径
    在终端执行以下命令,获取当前MySQL实际使用的Socket路径:

    mysql -e "show variables like 'socket'"
    

    输出类似:

    +---------------+---------------------------+
    | Variable_name | Value                     |
    +---------------+---------------------------+
    | socket        | /run/mysqld/mysqld.sock   |
    +---------------+---------------------------+
    
  2. 修正项目的数据库配置
    打开项目根目录的.env文件,更新DB_SOCKET配置为上一步获取的路径:

    DB_SOCKET=/run/mysqld/mysqld.sock
    

    若.env中无DB_SOCKET项,直接添加即可。

  3. 确保Cron任务加载正确的环境与路径
    编辑Cron任务时,必须指定项目目录和完整的PHP路径(避免Cron使用系统默认的PHP版本/配置)。示例Cron规则:

    * * * * * cd /path/to/your/laravel-project && /usr/bin/php artisan schedule:run >> /dev/null 2>&1
    
    • 替换/path/to/your/laravel-project为实际项目路径
    • 替换/usr/bin/php为服务器上PHP CLI的实际路径(可通过which php获取)
  4. 验证CLI环境的数据库连接
    在终端进入项目目录,执行以下命令测试CLI环境下的数据库连接:

    php artisan tinker
    

    在Tinker中执行:

    DB::connection()->getPdo();
    

    若返回PDO对象则连接正常,若报错则检查PHP CLI的mysql扩展是否安装,或配置是否正确。

  5. 可选:硬编码Socket路径到配置文件
    若.env配置仍不生效,可直接在config/database.php的MySQL配置中指定Socket:

    'mysql' => [
        // ...其他配置
        'unix_socket' => env('DB_SOCKET', '/run/mysqld/mysqld.sock'),
    ],
    

额外说明

手动插入cache表条目无效,是因为错误发生在数据库连接阶段,而非SQL执行阶段——Cron任务根本没连上MySQL,所以无论表中有没有数据都会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:35:09