我怎样才能优雅地关闭Rserve?

我在Mac和Ubuntu上都尝试过很多选项。 我阅读了Rserve文档

http://rforge.net/Rserve/doc.html

而对于Rserve和RSclient软件包:

http://cran.r-project.org/web/packages/RSclient/RSclient.pdf

http://cran.r-project.org/web/packages/Rserve/Rserve.pdf

我无法弄清楚在Rserve中打开/关闭连接以及正常关闭Rserve的正确工作流程。

例如,在Ubuntu中,我使用./config --enable-R-shlib从源代码安装了R(在Rserve文档之后),并在/etc/Rserve.conf中添加了“控制启用”行。

在Ubuntu终端中:

library(Rserve)
library(RSclient)
Rserve()
c<-RS.connect()
c ## this is an Rserve QAP1 connection

## Trying to shutdown the server
RSshutdown(c) 
Error in writeBin(as.integer....): invalid connection

RS.server.shutdown(c)
Error in RS.server.shutdown(c): command failed with satus code 0x4e: no control line present   (control commands disabled or server shutdown)

但是,我可以关闭连接:

RS.close(c)
>NULL
c ## Closed Rserve connection

关闭连接后,我也尝试了这些选项(即使连接已关闭,也尝试了参数'c'):

RS.server.shutdown()
RSshutdown()

所以,我的问题是:

1-如何优雅地关闭Rserve?

2- Rserve可以在没有RSclient的情况下使用吗?

我也看了一下

如何关闭Rserve(),在DEBUG中运行

但问题涉及调试模式,也未解决。 (我没有足够的信誉来评论/询问关机是否在非调试模式下工作)。

还看了一下:

如何通过R客户端连接到Rserve

非常感谢!


加载Rserve和RSclient软件包,然后连接到实例。

> library(Rserve)
> library(RSclient)

> Rserve(port = 6311, debug = FALSE)
> Rserve(port = 6312, debug = TRUE)

Starting Rserve...
 "C:..Rserve.exe" --RS-port 6311
Starting Rserve...
 "C:..Rserve_d.exe" --RS-port 6312 

> rsc <- RSconnect(port = 6311)
> rscd <- RSconnect(port = 6312)

看起来他们在跑...

> system('tasklist /FI "IMAGENAME eq Rserve.exe"')
> system('tasklist /FI "IMAGENAME eq Rserve_d.exe"')

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
Rserve.exe                    8600 Console                    1     39,312 K
Rserve_d.exe                 12652 Console                    1     39,324 K

让我们关闭他们。

> RSshutdown(rsc)
> RSshutdown(rscd)

他们走了......

> system('tasklist /FI "IMAGENAME eq Rserve.exe"')
> system('tasklist /FI "IMAGENAME eq Rserve_d.exe"')

INFO: No tasks are running which match the specified criteria.

通过使用args和/或配置脚本启动Rserve,可以使用Rserve不带RSclient。 然后您可以从其他程序(如Tableau)或您自己的代码连接到它。 RSclient提供了一种将命令/数据从R的实例传递给Rserve的方法。

希望这可以帮助 :)


在Windows系统上,如果要关闭RServe实例,可以使用Rsystem函数将其关闭。 例如在R

library(Rserve)
Rserve() # run without any arguments or ports specified
system('tasklist /FI "IMAGENAME eq Rserve.exe"') # run this to see RServe instances and their PIDs
system('TASKKILL /PID {yourPID} /F') # run this to kill off the RServe instance with your selected PID

如果您已经正确关闭了您的RServe实例,则会显示以下消息:

成功:PID xxxx的过程已终止。

您可以通过输入来检查RServe实例是否已关闭

system('tasklist /FI "IMAGENAME eq Rserve.exe"')

再次。 如果没有再运行RServe实例,则会收到消息

INFO:没有任何符合指定条件的任务正在运行。

有关此主题的更多帮助和信息可以在此相关问题中看到。

请注意,早先回答中提到的'RSClient'方法比这个更加简单和容易,但无论如何,对于那些启动RServe而不知道如何阻止它的人来说,我仍然RServe

链接地址: http://www.djcxy.com/p/61719.html

上一篇: How can I shut down Rserve gracefully?

下一篇: Invoking a jRuby gem from inside an MRI ruby on rails application