温馨提示×

linux laravel如何写定时任务

小樊
50
2026-10-18 20:46:19
栏目: 智能运维

在 Linux 上使用 Laravel 定时任务,核心思路是:
只写一个 Linux Cron,把所有任务交给 Laravel 的 schedule 管理。


一、Linux 中只配置一个 Cron

编辑当前用户的定时任务:

crontab -e

添加这一行(最关键):

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

说明:

  • * * * * *:每分钟执行一次
  • /path/to/laravel:你的 Laravel 项目根目录
  • Laravel 会根据你在代码中定义的规则决定“哪些任务真正执行”

✅ 不要在 Linux 里写多个 cron,全部交给 Laravel


二、在 Laravel 中定义定时任务

文件路径:

app/Console/Kernel.php

示例 1:每分钟执行

protected function schedule(Schedule $schedule)
{
    $schedule->call(function () {
        \Log::info('每分钟执行一次');
    })->everyMinute();
}

示例 2:每天凌晨执行

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

示例 3:自定义时间

$schedule->command('backup:run')
         ->dailyAt('02:30');

示例 4:每小时

$schedule->command('cache:clear')->hourly();

三、执行 Artisan 命令

先创建一个命令:

php artisan make:command SendEmails

在 app/Console/Commands/SendEmails.php 中:

protected $signature = 'email:send';

public function handle()
{
    // 业务逻辑
}

然后在 Kernel.php:

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

四、常用调度方法

方法 说明
->everyMinute() 每分钟
->everyFiveMinutes() 每 5 分钟
->hourly() 每小时
->daily() 每天 0 点
->dailyAt('13:00') 每天 13 点
->weekly() 每周
->monthly() 每月
->cron('0 0 * * 0') 原生 cron

五、调试定时任务

手动执行(不依赖 cron)

php artisan schedule:run

查看计划任务

php artisan schedule:list

六、常见问题

1. 不执行?

  • php 路径不对 → 用 which php 确认
  • 项目路径错误
  • cron 用户不对(www / root)

2. 权限问题

chown -R www:www storage bootstrap

3. 时区问题

在 .env 中:

APP_TIMEZONE=Asia/Shanghai

七、推荐结构(最佳实践)

✅ Linux:1 个 cron
✅ Laravel:Kernel.php 统一管理
✅ 命令:php artisan make:command


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

  • Laravel 版本
  • 想定时做什么(发邮件 / 备份 / 清理)
  • 是否用 Docker / 宝塔 / 服务器面板

我可以直接帮你写完整示例。

0 踩