每个星期一在 Shiny 中安排一个任务更新数据

问题描述

我有一个位于 Shiny Server pro 中的仪表板,可以显示不同的分析。数据来自需要大约 20 分钟才能完成的长查询

在我当前的设置中,我有一个更新数据的按钮:

  1. 查询新数据
  2. 转换数据
  3. 将数据保存在文件 .RData 中
  4. 将数据保存在全局对象中(使用 data <<-

以防万一,在服务器和 ui 函数之外,我有一个语句来检查数据对象是否存在。如果不存在,它会从 .RData 文件中读取数据,而不是再次执行查询

现在我想在每周一下午 5:00 更新数据(我不想每周一打开应用程序并按下按钮)。我认为最好的方法是使用 cronR 使用 cron 作业。代码将位于服务器和 ui 函数之外的 app.R 中。现在我有以下问题:

  1. 如果我使用 Shiny server pro 多少次,如果该应用位于服务器和 ui 功能之外的 app.R 中,它会创建 cron 作业吗?
  2. 如何替换闪亮的应用程序中的对象 data?这样一来,如果用户在周一下午 5:00 之后打开应用,数据就会就位,无需读取 .RData 文件,当然也不会再次进行查询
  3. 最佳做法是什么?

解决方法

我看不到您的观点 1. 我认为,如果应用程序未命名为“global.R”或“ui.R”或“server.R”,则该应用程序将不会创建 cron 作业。此外,您不必将代码放在 /srv/shiny-server/ 目录下。

对于您的第 2. 点,请检查 Shiny 库中的 reactiveFileReader 函数。此函数检查文件的上次修改时间,如果更改则重新读取文件

data <- reactiveFileReader(5*60*1000,filePath="NewData.Rda",readFunc = load) 
,

只需完全在闪亮的应用程序之外使用 cronR 创建您的 cron 进程,并确保它将您的数据保存到正确的位置。

创建获取数据的 R 代码:

library(...)
# ...
# x <- mydata
save(x,file = "NewData.Rda")

创建定时任务:

cmd <- cron_rscript("path/to/getdata.R")
cron_add(cmd,frequency = 'daily',id = 'job5',at = '05:00')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...