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

Shiny应用外网月度数据定时更新调度方案求助

Shiny应用第三方数据源高可用及自动更新解决方案

优化逻辑说明

核心解决两个问题:

  1. 拉取异常时不覆盖本地有效数据,避免站点维护导致应用无数据可用
  2. 配置月度自动调度,保证本地数据始终为最新可用版本

数据更新脚本优化

在原有逻辑基础上增加异常捕获机制,单数据源拉取失败时跳过该数据源更新,保留本地原有文件:

# 加载依赖包
library(data.table)
library(dplyr)

# 原有均值计算函数
dMean <- function(d){
  dd <- d  %>% filter(!between(month, 4, 10)) %>%
    arrange(Year, month) %>%
    filter(!(Year == min(Year) & month %in% 1:3 | 
               Year == max(Year) & month %in% 11:12)) %>%
    group_by(grp = cumsum(month == 11)) %>%
    summarise(Year = last(Year),
              value = mean(value)) %>%
    select(-grp)
  return(dd)
}

# GTA数据拉取与存储
tryCatch({
  dG1 <- fread('https://www.metoffice.gov.uk/hadobs/hadcrut4/data/current/time_series/HadCRUT.4.6.0.0.annual_ns_avg.txt',
               header = FALSE,select = c(1:2))
  GTA1 <- as.matrix(dG1)
  saveRDS(GTA1,"GTA.rds")
}, error = function(e) {
  message("GTA数据拉取失败,保留本地原有文件:", e$message)
})

# MEI数据拉取与存储
tryCatch({
  dM1 <- fread('https://psl.noaa.gov/data/correlation/mei.data',header = FALSE,fill = TRUE)
  dM2 <- dM1[complete.cases(replace(dM1, dM1 == -999.000, NA)),]
  dM3 <- matrix(as.numeric(unlist(dM2)),nrow=nrow(dM2))
  dM4 <- data.frame(Year = rep(unique(dM3[,1]), each = 12),month = 1:12,value = as.vector(t(dM3[,2:13])))
  MEI1 <- as.matrix(dMean(dM4))
  saveRDS(MEI1,"MEI.rds")
}, error = function(e) {
  message("MEI数据拉取失败,保留本地原有文件:", e$message)
})

# SST数据拉取与存储
tryCatch({
  dS1 <- fread('https://www.cpc.ncep.noaa.gov/data/indices/sstoi.indices',header = TRUE,select = c(1,2,10))
  dS2 <- as.matrix(dS1)
  dS3 <- data.frame(Year = dS2[,1],month = dS2[,2], value = dS2[,3])
  SST1 <- as.matrix(dMean(dS3))
  saveRDS(SST1,"SST.rds")
}, error = function(e) {
  message("SST数据拉取失败,保留本地原有文件:", e$message)
})

月度自动调度配置

根据部署环境选择对应调度方案:

  • Linux服务器:使用crontab配置,执行crontab -e后添加如下规则(每月1日凌晨2点执行,替换为实际的Rscript路径和脚本路径即可):
    0 2 1 * * /usr/bin/Rscript /your/path/update_data.R >> /your/path/update_log.log 2>&1
    
  • Windows服务器:使用系统自带的任务计划程序,新建任务设置触发器为每月1日触发,操作设置为启动Rscript程序,传入更新脚本的完整路径作为参数。
  • macOS服务器:可使用launchd或crontab配置规则,同Linux配置逻辑。

Shiny应用侧修改

移除应用中原有的远程拉取数据逻辑,直接读取本地缓存的RDS文件即可:

# 应用启动时加载本地数据
GTA1 <- readRDS("GTA.rds")
MEI1 <- readRDS("MEI.rds")
SST1 <- readRDS("SST.rds")

优化后即使某个第三方站点临时维护,也只会跳过对应数据源的更新,应用始终可以读取到上一次成功拉取的有效数据,不会出现运行中断的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:24:03