温馨提示×

linux laravel怎样定时任务

小樊
46
2026-09-22 10:52:37
栏目: 智能运维

Linux + Laravel 中,定时任务一般是通过 Laravel 的任务调度(Task Scheduling)+ Linux 的 cron 来实现的。


一、核心原理

Laravel 本身不负责“定时执行”,而是:

  1. Linux 的 cron 每分钟调用一次 Laravel
  2. Laravel 的调度器 判断哪些任务该执行

二、配置 Linux cron(关键一步)

编辑当前用户的 cron:

crontab -e

添加这一行(最重要):

* * * * * cd /path/to/your/laravel && php artisan schedule:run >> /dev/null 2>&1

说明:

  • * * * * *:每分钟执行一次
  • /path/to/your/laravel:你的 Laravel 根目录
  • php artisan schedule:run:Laravel 调度入口

✅ 只需要这一条 cron,所有 Laravel 定时任务都在代码里管理


三、在 Laravel 中定义定时任务

1️⃣ 打开调度文件

app/Console/Kernel.php

2️⃣ 在 schedule() 中定义任务

protected function schedule(Schedule $schedule)
{
    // 每分钟执行
    $schedule->call(function () {
        // 业务逻辑
    })->everyMinute();

    // 每天凌晨执行
    $schedule->command('email:send')->daily();

    // 每小时执行
    $schedule->command('cache:clear')->hourly();
}

四、常见调度方法

方法 说明
everyMinute() 每分钟
everyFiveMinutes() 每 5 分钟
hourly() 每小时
daily() 每天 00:00
dailyAt('13:30') 每天 13:30
weekly() 每周
monthly() 每月
cron('0 0 * * 0') 自定义 cron

五、执行 Artisan 命令作为定时任务

先创建命令:

php artisan make:command SendEmail

SendEmail.php 中写逻辑,然后调度:

$schedule->command('send:email')->daily();

六、查看调度是否生效

手动执行:

php artisan schedule:run

查看已定义任务:

php artisan schedule:list

七、常见问题

❌ 任务不执行

  • cron 用户不对(用 crontab -u www-data -e
  • PHP 路径不对(用 which php
  • 目录权限问题

✅ 推荐写法

* * * * * www-data cd /var/www/laravel && /usr/bin/php artisan schedule:run

如果你愿意,可以告诉我:

  • Laravel 版本
  • 是服务器 / Docker / 宝塔
  • 想定时做什么任务

我可以给你直接可用的配置示例

0