温馨提示×

linux laravel如何做定时任务

小樊
40
2026-10-07 03:17:56
栏目: 智能运维

在 Linux 上使用 Laravel 定时任务,核心是通过 Laravel Task Scheduling + Linux crontab 来实现。下面一步一步说明。


一、Laravel 中定义定时任务

1. 创建命令(可选但推荐)

php artisan make:command SendEmails

生成文件:app/Console/Commands/SendEmails.php

示例:

protected $signature = 'email:send';
protected $description = 'Send emails';

public function handle()
{
    // 业务逻辑
    \Log::info('Email sent');
}

2. 在 app/Console/Kernel.php 中注册调度

protected function schedule(Schedule $schedule)
{
    // 每分钟执行
    $schedule->command('email:send')->everyMinute();

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

    // 自定义时间
    // $schedule->command('email:send')->cron('0 2 * * *');
}

二、Linux 中配置 crontab(关键)

1. 编辑 crontab

crontab -e

2. 添加一行(只加这一条即可)

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

说明:

  • * * * * *:每分钟触发一次
  • schedule:run 会检查 Laravel 里定义的任务是否该执行
  • /path/to/laravel 替换为你的项目根目录

三、常用调度方法

->everyMinute()
->everyFiveMinutes()
->hourly()
->daily()
->weekly()
->monthly()
->cron('0 3 * * *') // 自定义

四、调试与排查

查看任务是否执行

php artisan schedule:list

手动执行某个命令

php artisan email:send

查看日志

storage/logs/laravel.log

常见问题

  1. php 命令找不到

    which php
    

    使用绝对路径,例如:

    * * * * * cd /www/laravel && /usr/bin/php artisan schedule:run
    
  2. 权限问题

    chown -R www:www storage bootstrap/cache
    

五、生产环境建议

  • 使用 queue + schedule 配合
  • 日志输出:
    ->appendOutputTo(storage_path('logs/task.log'))
    

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

  • Laravel 版本
  • 是否使用 Docker / 宝塔 / 服务器面板
  • 具体想定时做什么

我可以给你更精确的配置示例。

0 踩