Laravel如何创建每日固定时间执行调用sendMessage函数的定时任务
Laravel 实现每日定时调用 sendMessage 任务的方案
步骤1:创建自定义控制台命令
执行Artisan命令生成命令类:
php artisan make:command SendDailyTemplateMessage
生成的文件位于 app/Console/Commands/SendDailyTemplateMessage.php,修改文件内容如下:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; // 引入你定义sendMessage方法的类,比如如果在MessageController里就引入对应控制器 use App\Http\Controllers\MessageController; class SendDailyTemplateMessage extends Command { // 命令签名,后续调度用这个标识 protected $signature = 'message:send-daily-template'; // 命令描述 protected $description = '每日定时发送模板消息'; public function __construct() { parent::__construct(); } // 命令执行逻辑 public function handle() { // 实例化对应类调用sendMessage方法,建议提前把sendMessage抽成独立服务类更规范 $messageService = new MessageController(); $messageService->sendMessage(); $this->info('模板消息发送任务执行完成'); } }
步骤2:注册定时调度规则
打开 app/Console/Kernel.php 文件,在 schedule 方法中添加调度规则:
protected function schedule(Schedule $schedule) { // 示例:每天上午9点执行发送任务,可自行修改时间,支持时区设置 $schedule->command('message:send-daily-template') ->dailyAt('09:00') ->timezone('Asia/Shanghai'); // 国内环境建议加上时区配置 }
步骤3:配置服务器Crontab入口
Laravel的调度器需要服务器定时触发入口才能运行,在你部署项目的Linux服务器中执行crontab -e,添加如下规则:
* * * * * cd /你的项目根目录绝对路径 && php artisan schedule:run >> /dev/null 2>&1
配置完成后保存即可生效,Laravel会自动按照你定义的规则每日触发任务。
可选优化建议
- 把
sendMessage逻辑从控制器中抽成独立的服务类,避免命令层直接依赖控制器,复用性和可维护性更高 - 发送消息时如果用户量较大,建议将单条通知推送拆分为队列任务异步执行,避免任务超时
- 可以在sendMessage中添加运行日志,方便后续排查发送失败等问题
内容的提问来源于stack exchange,提问作者Marcius Leandro
相关产品推荐
相关产品推荐

