温馨提示×

linux laravel如何定时

小樊
37
2026-10-27 19:30:36
栏目: 智能运维

在 Linux 上使用 Laravel 实现“定时任务”,核心就是 Linux 的 cron + Laravel 的 Task Scheduling。下面一步一步说明。


一、Laravel 定时任务原理

Laravel 自带任务调度器(schedule),你只需要:

  1. 在 routes/console.php 或 app/Console/Kernel.php 中定义任务
  2. 在 Linux 的 crontab 中只加一条 cron
  3. Laravel 自己控制“多久执行一次”

二、定义 Laravel 定时任务

方式 1:使用闭包(简单)

routes/console.php

use Illuminate\Support\Facades\Schedule;

Schedule::call(function () {
    // 你要执行的代码
    \Log::info('定时任务执行了');
})->everyMinute();

方式 2:使用 Artisan 命令(推荐)

  1. 创建命令
php artisan make:command SendEmails
  1. 编辑 app/Console/Commands/SendEmails.php
protected $signature = 'send:emails';

public function handle()
{
    // 业务逻辑
    \Log::info('发送邮件');
}
  1. 在 app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $schedule->command('send:emails')->dailyAt('09:00');
}

三、Linux 配置 cron(关键)

1. 编辑 crontab

crontab -e

2. 添加这一行(⚠️只需要一条)

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

示例:

* * * * * cd /var/www/laravel && php artisan schedule:run >> /dev/null 2>&1

意思是:每分钟让 Laravel 检查一次是否有任务需要执行


四、常用调度频率

->everyMinute();
->everyFiveMinutes();
->hourly();
->daily();
->dailyAt('13:30');
->weekly();
->monthly();
->cron('0 0 * * 0');

五、常见问题排查

1. 任务不执行?

✅ 检查:

php artisan schedule:run

✅ 检查日志:

storage/logs/laravel.log

✅ cron 是否运行:

service cron status
# 或
systemctl status cron

2. 权限问题

确保:

  • php 可执行
  • cron 用户有项目权限
  • storage 可写

3. 使用队列(耗时任务)

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

或命令里 dispatch(new Job())


六、总结

✅ Linux 只配一条 cron
✅ Laravel 用 schedule 管理时间
✅ 推荐用 Artisan Command

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

  • Laravel 版本
  • 想定时做什么(发邮件 / 清缓存 / 备份数据库)
  • 服务器系统(Ubuntu / CentOS)

我可以给你完整可直接用的示例。

0 踩