我怎样才能优雅地关闭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
实例,可以使用R
的system
函数将其关闭。 例如在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
。
上一篇: How can I shut down Rserve gracefully?
下一篇: Invoking a jRuby gem from inside an MRI ruby on rails application