温馨提示×

laravel在centos如何定时

小樊
38
2026-10-20 09:25:33
栏目: 智能运维

在 CentOS 上让 Laravel 定时任务运行,标准做法是使用 Linux 的 crontab + Laravel 的 Task Scheduling。

下面一步一步说明:


一、Laravel 中定义定时任务

1. 编辑调度文件

路径:

app/Console/Kernel.php

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

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

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

命令示例:php artisan demo:test


二、CentOS 配置 crontab(关键)

1. 编辑 crontab

crontab -e

如果是 web 用户(如 www 或 nginx),建议用:

sudo crontab -u www -e

2. 添加 Laravel 调度入口(只加这一条)

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

✅ 说明:

  • * * * * *:每分钟触发
  • schedule:run:Laravel 自己判断该执行哪些任务
  • 你不需要为每个任务单独写 crontab

三、常见问题排查

1. PHP 路径问题

如果 php 不在 PATH 中,使用完整路径:

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

查看 php 路径:

which php

2. 权限问题

确保:

  • storage 和 bootstrap/cache 可写
  • crontab 用户有权限访问项目

3. 查看是否执行

临时把日志打开:

* * * * * cd /path/to/laravel && php artisan schedule:run >> /tmp/laravel_cron.log 2>&1

然后:

tail -f /tmp/laravel_cron.log

四、推荐最佳实践

✅ 只写 一条 crontab ✅ 所有任务写在 Kernel.php ✅ 使用 withoutOverlapping() 防止重复执行

$schedule->command('demo:test')->everyMinute()->withoutOverlapping();

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

  • CentOS 版本(7 / 8 / Stream)
  • PHP 版本
  • 是否用 supervisor / docker

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

0 踩