温馨提示×

laravel在linux如何定时任务

小樊
42
2026-10-21 18:32:20
栏目: 智能运维

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


一、Laravel 中的定时任务(Schedule)

1. 定义任务

在 app/Console/Kernel.php 的 schedule 方法中定义任务:

protected function schedule(Schedule $schedule)
{
    // 每分钟执行一次
    $schedule->command('inspire')->everyMinute();

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

    // 调用闭包
    $schedule->call(function () {
        // 自定义逻辑
    })->hourly();
}

常用时间方法:

  • ->everyMinute()
  • ->everyFiveMinutes()
  • ->hourly()
  • ->daily()
  • ->weekly()
  • ->monthly()

二、Linux 中配置 crontab(关键)

Laravel 本身不会自动运行,需要 Linux 的 cron 来“每分钟调用一次” Laravel 调度器。

1. 编辑 crontab

crontab -e

2. 添加一行(⚠️最重要)

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

示例(普通用户):

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

示例(指定 PHP 路径):

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

✅ 这一行会让 Laravel 自己判断“哪些任务该执行”。


三、常见问题排查

1. 定时任务不执行?

检查:

php artisan schedule:run

手动执行是否报错。

2. 查看 cron 日志(CentOS / Ubuntu)

tail -f /var/log/cron
# 或
tail -f /var/log/syslog | grep CRON

3. PHP 路径问题

which php

确保 crontab 中使用的是正确 PHP。

4. 权限问题

  • storage/ 目录可写
  • cron 用户有项目访问权限

四、示例:每天凌晨备份数据库

$schedule->command('backup:clean')->daily()->at('01:00');
$schedule->command('backup:run')->daily()->at('02:00');

crontab 只需要:

* * * * * cd /var/www/laravel && php artisan schedule:run

五、总结一句话

Linux crontab 只负责“每分钟调用一次 Laravel”,具体任务由 Laravel 自己管理。

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

  • 你的 Linux 发行版(CentOS / Ubuntu)
  • Laravel 版本
  • 想定时做什么任务

我可以给你一份可直接用的配置。

0 踩