执行R脚本ssh和nohup

问题描述 投票:0回答:1

我在远程服务器上有

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 &'
,但结果完全一样。

有什么想法吗? 谢谢!

r ssh nohup
1个回答
0
投票

正如评论中提到的,

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

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

a <- ssh::ssh_exec_wait(
  ssh_session,
  command = 'nohup Rscript test.R >/dev/null 2>&1 &'
)
© www.soinside.com 2019 - 2024. All rights reserved.