在 Linux + Laravel 中,定时任务一般是通过 Laravel 的任务调度(Task Scheduling)+ Linux 的 cron 来实现的。
Laravel 本身不负责“定时执行”,而是:
编辑当前用户的 cron:
crontab -e
添加这一行(最重要):
* * * * * cd /path/to/your/laravel && php artisan schedule:run >> /dev/null 2>&1
说明:
* * * * *:每分钟执行一次/path/to/your/laravel:你的 Laravel 根目录php artisan schedule:run:Laravel 调度入口✅ 只需要这一条 cron,所有 Laravel 定时任务都在代码里管理
app/Console/Kernel.php
schedule() 中定义任务protected function schedule(Schedule $schedule)
{
// 每分钟执行
$schedule->call(function () {
// 业务逻辑
})->everyMinute();
// 每天凌晨执行
$schedule->command('email:send')->daily();
// 每小时执行
$schedule->command('cache:clear')->hourly();
}
| 方法 | 说明 |
|---|---|
everyMinute() |
每分钟 |
everyFiveMinutes() |
每 5 分钟 |
hourly() |
每小时 |
daily() |
每天 00:00 |
dailyAt('13:30') |
每天 13:30 |
weekly() |
每周 |
monthly() |
每月 |
cron('0 0 * * 0') |
自定义 cron |
先创建命令:
php artisan make:command SendEmail
在 SendEmail.php 中写逻辑,然后调度:
$schedule->command('send:email')->daily();
手动执行:
php artisan schedule:run
查看已定义任务:
php artisan schedule:list
crontab -u www-data -e)which php)* * * * * www-data cd /var/www/laravel && /usr/bin/php artisan schedule:run
如果你愿意,可以告诉我:
我可以给你直接可用的配置示例。