You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel如何自动执行调度?无法自动删除过期OTP求助

解决Laravel调度任务不自动执行的问题

问题根源

php artisan serve只是Laravel的开发HTTP服务器,它仅负责处理网页请求,完全不会触发任务调度器。Laravel的调度器必须依赖外部定时机制(比如系统Cron)每分钟执行一次php artisan schedule:run,才能定期触发你的OTP过期清理任务。

解决办法

本地开发环境临时测试

如果只是在本地开发时想验证自动执行效果,开个新终端运行以下命令即可:

while true; do php artisan schedule:run; sleep 60; done

这个命令会每隔60秒自动触发一次调度器,模拟Cron的定时执行效果。

正式/生产环境配置

在服务器上配置系统Cron定时任务,让它每分钟自动执行调度命令:

  1. 打开Cron编辑界面:
    crontab -e
    
  2. 添加以下内容(记得替换成你的项目绝对路径和服务器实际的PHP路径):
    * * * * * cd /你的Laravel项目绝对路径 && /usr/bin/php8.1 artisan schedule:run >> /dev/null 2>&1
    
    说明:
    • * * * * * 表示每分钟执行一次
    • cd /你的Laravel项目绝对路径:切换到项目根目录,确保命令能找到artisan文件
    • /usr/bin/php8.1:替换成你服务器上实际的PHP可执行文件路径
    • >> /dev/null 2>&1:将命令输出重定向到空设备,避免生成大量冗余日志

额外检查点

  • 确认调度任务的频率配置正确,打开app/Console/Kernel.php,确保Otp:expire命令的调度规则符合需求,比如:
    protected function schedule(Schedule $schedule)
    {
        // 每分钟执行一次过期OTP清理
        $schedule->command('Otp:expire')->everyMinute();
    }
    
  • 配置完Cron后,等待一分钟查看otps表,或者查看storage/logs/laravel.log日志,确认任务是否正常执行。

内容的提问来源于stack exchange,提问作者arrow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:00:39