在 Debian 上设置 Laravel 定时任务(Cron),核心就是让系统 每分钟调用一次 Laravel 的调度器。下面按步骤说明。
在 app/Console/Kernel.php 中,schedule() 方法里定义任务,例如:
use Illuminate\Support\Facades\Schedule;
protected function schedule(Schedule $schedule)
{
$schedule->command('emails:send')->daily();
}
或 Laravel 10+ 推荐写法:
use Illuminate\Support\Facades\Schedule;
Schedule::command('emails:send')->daily();
在服务器上执行:
php /path/to/your/project/artisan schedule:run
✅ 能正常执行即可
❌ 如果报错,检查 PHP 版本、路径、权限
通常用 项目运行用户(如 www-data 或你的普通用户):
crontab -e
如果是给
www-data:
sudo crontab -u www-data -e
* * * * * php /path/to/your/project/artisan schedule:run >> /dev/null 2>&1
✅ 推荐写法(记录日志):
* * * * * php /path/to/your/project/artisan schedule:run >> /var/log/laravel-schedule.log 2>&1
* * * * * php /var/www/laravel/artisan schedule:run >> /var/log/laravel-schedule.log 2>&1
sudo systemctl status cron
如未启动:
sudo systemctl start cron
sudo systemctl enable cron
php artisan schedule:run
如果看到类似:
Running scheduled command: ...
说明调度正常。
tail -f /var/log/laravel-schedule.log
✅ 建议用完整 PHP 路径:
/usr/bin/php /var/www/laravel/artisan schedule:run
查看 PHP 路径:
which php
sudo chown -R www-data:www-data /var/www/laravel
sudo chmod -R 755 /var/www/laravel
✅ 使用 .env 中 APP_TIMEZONE=Asia/Shanghai
✅ Cron 只跑 schedule:run,不要直接跑命令
✅ 日志定期清理
✅ 使用 supervisor 管理常驻任务(如队列)
如果你愿意,可以告诉我:
www-data / 普通用户我可以给你 完全贴合你环境的配置示例 ✅