我在远程服务器上有R个文件test.R.它只包含以下内容:

Sys.sleep(5)

在我的本地计算机中,我有我的local.R文件:

library(ssh)

host<-"root@someip"
keyfile<-"mykeyfile.osh"
passwd<-"mypassword"

ssh_session <- ssh::ssh_connect(host,keyfile,passwd)

print(Sys.time())
a<-ssh::ssh_exec_wait(ssh_session,
                      command = 'nohup R CMD BATCH test.R &')
print(Sys.time())

ssh::ssh_disconnect(ssh_session)

当我执行local.R时,我得到以下输出:

[1] "2023-09-16 17:41:52.707577 CEST"
[1] "2023-09-16 17:41:58.132833 CEST"

如果你观察,这两个时间之间的差异超过5秒.我期待的是第二版不要等到完成test.R的执行.我的最终目标是让它在一款shiny应用程序上运行.

编辑.我也用了command = 'nohup Rscript test.R &',但结果还是差不多的.

有什么主意吗? 谢谢!

推荐答案

正如 comments 中提到的,ssh_exec_wait() always等待服务器端标准输出和错误流关闭.顺便说一句,这与ssh命令行实用程序的行为相同,除非强制通过-t选项进行伪终端分配.

因此,避免等待的一个 Select 是重定向命令的输出和错误流,以将它们从终端分离:

a <- ssh::ssh_exec_wait(
  ssh_session,
  command = 'nohup Rscript test.R >/dev/null 2>&1 &'
)

请注意,上述内容(显然)会丢弃任何输出.如果您need输出,您需要调整您的脚本,或者执行重定向到合适的文件.

R相关问答推荐

如何向使用plot_smooths()函数显示的GAM结果图表中添加点?

如何在列表的子元素上使用setName

从R中的函数中提取变量以及它们来自哪些环境?

使用gggplot 2在R中重新调整面板和y轴文本大小

更改绘图上的x轴断点,而不影响风险?

R等效于LABpascal(n,1)不同的列符号

找出疾病消失的受试者

次级y轴R gggplot2

在发布到PowerBI Service时,是否可以使用R脚本作为PowerBI的数据源?

如果行和大于值,则过滤

警告:lmdif:info = 0. nls. lm()函数的输入参数不正确

在RStudio中堆叠条形图和折线图

有效识别长载体中的高/低命中

通过在colname中查找其相应值来创建列

R Read.table函数无法对制表符分隔的数据正常工作

用约翰逊分布进行均值比较

SHINY:使用JS函数应用的CSS样式显示HTML表格

用R ggplot2求上、下三角形中两个变量的矩阵热图

根据纬度和距离连接两个数据集

快速合并R内的值