Bash 从后台进程Rstudio服务器更新活动会话中的全局变量

Bash 从后台进程Rstudio服务器更新活动会话中的全局变量,bash,shell,environment-variables,rstudio,rstudio-server,Bash,Shell,Environment Variables,Rstudio,Rstudio Server,这可能是理论上的,而不是其他任何东西;一个解决方案将是了不起的,但任何反馈/想法都同样受欢迎 简单地说,我想知道是否可以从会话之外的后台进程更新rstudio服务器上活动会话中的环境变量 例如,假设: 我们有一个脚本,作为cron作业每分钟运行一次,它轮询一系列网站,并将某些元素解析为data.frame 我们的函数首先读取最初创建的data.frame,如果它检测到我们正在轮询的网站中的更改,它会在新行中附加一个时间戳,然后将data.frame保存回rds文件;如果没有发现任何差异,它就会退

这可能是理论上的,而不是其他任何东西;一个解决方案将是了不起的,但任何反馈/想法都同样受欢迎

简单地说,我想知道是否可以从会话之外的后台进程更新rstudio服务器上活动会话中的环境变量

例如,假设:

  • 我们有一个脚本,作为
    cron
    作业每分钟运行一次,它轮询一系列网站,并将某些元素解析为
    data.frame
  • 我们的函数首先读取最初创建的
    data.frame
    ,如果它检测到我们正在轮询的网站中的更改,它会在新行中附加一个时间戳,然后将
    data.frame
    保存回
    rds
    文件;如果没有发现任何差异,它就会退出
  • 在我们的
    .First
    函数中,每个会话都以
    assign('.url_df',readRDS('/home/user/url_checkr.rds'),envir=.GlobalEnv)开始
    ,因此我们总是将最新的更新分配到活动的工作会话中,并且在全局范围内始终具有相同的变量名 现在的目标是能够从运行在cron或alternative上的外部脚本中更新该环境变量,必要时使用任何更新的行

    我知道如何使用
    echo msg>/proc/$pid/fd/0
    在终端之间发送消息,并且知道我们可以在初始函数中使用
    system('ps',intern=TRUE)
    检查任何活动会话并获取它们的
    pid
    。问题是,我们/是否有可能使用这种方法在活动会话的背景中使用任何更新的字段来实际更新
    .Global
    变量?从那以后,制定向控制台发送消息的方法就不难了

    纯粹好奇/不确定我是否正确地理解了整个想法


    谢谢

    我认为最直接的方法是使用R

    此函数有效地允许您在每次顶级R任务完成时(即在控制台中执行的每个R表达式之后)运行代码。您可以建立一个任务回调,它可以有效地执行您在
    中所做的操作。首先
    (如有必要,更新全局变量)。回调到位后,随着用户继续执行R代码,全局变量将在后台自动更新


    根据数据的大小,您可能需要添加一些保护措施,以避免每次都从磁盘读取整个RDS文件;例如,您可以随文件一起编写校验和,然后检查校验和是否不同

    好主意。谢谢你的反馈。出于好奇,您过去是否尝试过实现类似的功能?