温馨提示×

Debian下Laravel如何定时

小樊
48
2026-07-06 07:14:23
栏目: 智能运维

在 Debian 下为 Laravel 设置定时任务,核心就是 使用 Linux 的 crontab 来调用 Laravel 的调度器(schedule)。下面按步骤说明。


一、Laravel 调度器原理

Laravel 本身不单独管理定时任务,而是:

  • 只需要在 crontab 中每分钟执行一次
    php artisan schedule:run
    
  • 然后 所有定时逻辑写在 app/Console/Kernel.phpschedule() 方法中

二、配置 Laravel 定时任务

1️⃣ 编辑 Kernel

nano app/Console/Kernel.php

例如:

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

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

常见频率:

方法 说明
->everyMinute() 每分钟
->hourly() 每小时
->daily() 每天 00:00
->dailyAt('02:30') 每天 2:30
->weekly() 每周
->monthly() 每月

三、Debian 下配置 crontab

1️⃣ 切换到你的项目用户(推荐)

⚠️ 不要用 root 跑 Laravel(除非你很清楚)

sudo su - www-data
# 或
sudo su - youruser

2️⃣ 编辑 crontab

crontab -e

3️⃣ 添加 Laravel 调度器

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

✅ 含义:

  • * * * * *:每分钟执行
  • cd /var/www/your-laravel-project:进入项目目录
  • php artisan schedule:run:运行 Laravel 调度器

4️⃣ 确认 PHP 路径(重要)

查看 PHP 路径:

which php

如果输出是:

/usr/bin/php

那就写成:

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

四、验证是否生效

1️⃣ 查看 cron 日志(Debian 默认可能没开)

sudo systemctl status cron

或:

grep CRON /var/log/syslog

2️⃣ Laravel 调试方式

在 Kernel 中先测试:

$schedule->call(function () {
    \Log::info('cron test');
})->everyMinute();

然后查看:

tail -f storage/logs/laravel.log

五、常见问题

❌ 1. 权限问题

sudo chown -R www-data:www-data storage bootstrap/cache

❌ 2. PHP CLI 版本不一致

php -v

如果 Web 和 CLI 版本不同,指定完整路径:

/usr/bin/php8.2 artisan schedule:run

❌ 3. 没有执行 cron 服务

sudo systemctl enable cron
sudo systemctl start cron

六、总结(最简流程)

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

然后在 Kernel.php 里写你的定时逻辑 ✅


如果你愿意,我可以帮你:

  • ✅ 写 具体 cron 示例
  • ✅ 检查 PHP / Laravel 权限
  • ✅ 调试 为什么 cron 没跑

直接把你的 Debian 版本 + PHP 版本 + Laravel 版本发我即可。

0