如何在Hostinger中配置Laravel定时任务以印度标准时间(IST)执行
Laravel定时任务调整为印度标准时间(IST)执行的解决方案
由于服务器采用UTC时区,要让Laravel定时任务按IST(Asia/Kolkata,UTC+5:30)执行,有两种可行方案:
方案一:全局设置应用时区(所有任务统一使用IST)
修改项目根目录下config/app.php文件中的时区配置:
'timezone' => 'Asia/Kolkata',
修改完成后,执行以下命令清除并缓存配置,确保生效:
php artisan config:cache
此方案会让整个应用的时区变为IST,若应用其他业务逻辑依赖UTC时区,不建议使用。
方案二:仅为定时任务指定时区(不影响应用全局时区)
直接在kernel.php的调度方法中,为所有任务统一设置时区,或为单个任务单独指定:
统一设置所有任务时区
修改schedule方法如下:
protected function schedule(Schedule $schedule) { // 为所有定时任务设置时区为印度标准时间 $schedule->timezone('Asia/Kolkata'); $schedule->command('websockets:clean')->daily(); // 切换店铺状态 $schedule->command("store:toggle")->everyMinute(); // 切换商品状态 $schedule->command("product:toggle")->everyMinute(); $schedule->command("driver:isbusy")->everyMinute(); $schedule->command("tempdata:dump")->daily(); }
为单个任务指定时区
如果仅需部分任务使用IST,可给对应任务链式调用timezone方法:
protected function schedule(Schedule $schedule) { // 仅该任务按IST的每日0点执行 $schedule->command('websockets:clean')->daily()->timezone('Asia/Kolkata'); // 切换店铺状态 $schedule->command("store:toggle")->everyMinute(); // 切换商品状态 $schedule->command("product:toggle")->everyMinute(); $schedule->command("driver:isbusy")->everyMinute(); // 仅该任务按IST的每日0点执行 $schedule->command("tempdata:dump")->daily()->timezone('Asia/Kolkata'); }
注意事项
- Laravel的调度器依赖服务器上的每分钟Cron任务,确保Hostinger服务器上已正确配置Laravel调度器的Cron条目(通常是
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1)。 - 修改代码后无需重启服务器,调度器会自动读取新的时区配置。
内容的提问来源于stack exchange,提问作者Vara Prasad
相关产品推荐
相关产品推荐

