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

Laravel 9 Cron任务未执行:数据库无变更问题求助

Laravel 9 Cron任务不执行排查方案

一、先确认系统Cron核心配置

这是最容易遗漏的步骤:必须在服务器的Cron中添加Laravel调度器的触发命令,否则schedule:list能看到任务,但实际不会被触发。

  1. 执行crontab -e编辑当前用户的Cron规则
  2. 添加以下内容(替换为你的项目绝对路径):
    * * * * * cd /var/www/your-laravel-project && php artisan schedule:run >> /dev/null 2>&1
    
    注意:如果服务器存在多个PHP版本,要写PHP的完整路径(比如/usr/bin/php8.1),避免环境变量不匹配;同时Cron执行用户要和项目权限用户一致,否则会出现数据库访问、文件写入权限问题。

二、排查任务执行的环境差异

命令行手动执行和Cron执行的环境可能不一致:

  • 在Kernel.php的任务逻辑中添加日志输出,验证任务是否真的被触发:
    use Illuminate\Support\Facades\Log;
    
    protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            Log::info('Notification更新任务触发', ['user' => get_current_user(), 'env' => env('APP_ENV')]);
            // 你的更新逻辑
            DB::table('notifications')->update(['read_at' => now()]);
        })->everyMinute();
    }
    
    然后查看storage/logs/laravel.log,如果没有这条日志,说明Cron根本没触发调度器;如果有日志但数据库没变化,再排查逻辑或数据库权限。

三、查看错误日志

Cron系统日志

  • Ubuntu/Debian:查看/var/log/syslog,用grep CRON /var/log/syslog过滤Cron相关记录,能看到任务是否执行、是否有路径错误或权限报错。
  • CentOS/RHEL:直接查看/var/log/cron文件,里面记录了所有Cron任务的执行情况。

Laravel应用日志

默认路径是storage/logs/laravel.log,任务执行中的数据库错误、逻辑报错都会在这里输出详细信息,比如数据库连接失败、字段不存在等问题。

四、其他验证步骤

  1. 手动执行php artisan schedule:run,看终端是否有任务执行的输出,验证任务本身逻辑是否正常。
  2. 检查项目权限:确保storage/和bootstrap/cache/目录有写入权限,避免日志无法记录或配置缓存异常。
  3. 确认Kernel.php中的任务调度方法正确,比如是否用了->everyMinute(),闭包或命令是否无误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:32:08