温馨提示×

linux laravel怎样设置定时任务

小樊
42
2026-10-04 05:38:19
栏目: 智能运维

在 Linux 上给 Laravel 设置定时任务,通常是通过 Linux 的 crontab + Laravel 的 Task Scheduling 来实现的。下面一步步说明。


一、Laravel 中定义定时任务

1. 编辑调度文件

文件路径:

app/Console/Kernel.php

在 schedule() 方法中定义任务,例如:

protected function schedule(Schedule $schedule)
{
    // 每天凌晨执行
    $schedule->command('inspire')->daily();

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

    // 自定义时间
    $schedule->call(function () {
        // 代码逻辑
    })->dailyAt('02:00');
}

常用方法:

  • ->everyMinute()
  • ->hourly()
  • ->daily()
  • ->weekly()
  • ->monthly()
  • ->cron('0 0 * * *')

二、Linux 中添加 Crontab(关键)

1. 编辑 crontab

crontab -e

2. 添加一行(只加这一条就够了)

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

说明:

  • * * * * *:每分钟触发一次
  • cd /path/to/your/laravel:进入项目目录
  • php artisan schedule:run:Laravel 自己判断该执行哪些任务
  • /dev/null 2>&1:不输出日志(可选)

✅ 只需要这一条 crontab,不需要每个任务都写一条


三、确认环境

1. PHP 路径(推荐写绝对路径)

which php

例如:

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

2. 权限问题

确保:

  • storage 和 bootstrap/cache 可写
  • crontab 用户有执行权限

四、查看和调试

查看已设置的任务

crontab -l

手动测试

php artisan schedule:run

查看日志

tail -f storage/logs/laravel.log

五、常见错误

❌ 每个任务都写一条 crontab
✅ 只用 schedule:run

❌ 路径写错
✅ 使用绝对路径

❌ 使用 www 用户但 crontab 是 root
✅ 统一用户


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

  • Laravel 版本
  • Linux 发行版(CentOS / Ubuntu)
  • 具体想定时执行什么任务

我可以直接帮你写完整配置。

0 踩