我已经按照下面的例子构建了我的应用程序:
library(RestRserve)
app = Application$new()
app$add_get(
path = "/hello",
FUN = function(request, response) {
response$set_body("Hello from RestRserve")
})
backend = BackendRserve$new()
backend$start(app, http_port = 8080)
使用最后一个命令,Rserve会唤醒并正确地侦听和应答端口8080上的请求。现在,我想把上面的命令放在远程服务器上的脚本中,用Rscript启动它,让它永远监听。但是,一旦我断开与ssh的连接,它就会停止工作。我做错什么了吗?注意,我只安装了RestRserve,Rserve是一个依赖项,但我没有更改任何内容或自定义任何配置文件。
查看源代码,我建议将命名参数background=TRUE
添加到backend$start(app, http_port = 8080)
。此参数默认为FALSE(第36行(,当TRUE Rserve将在新的分离的R-会话中启动时(第93行(。(顺便说一句,去掉上述参数,你可以通过保持第二个SSH连接打开并列出带过滤器的运行进程来检查断开连接是否会杀死你正在运行的R-会话:断开连接前后的ps aux | grep bin/exec/R
(
如果使用上述参数有效,您可能还需要查看服务器的重新启动情况。从外观上看,RestRserve实际上无法单独处理这一问题,您可能需要一个小的服务脚本。
我在rexy.ai和karo的帮助下解决了:正确的脚本使用backend$start(app, http_port = 8080)
(没有后台选项(,但部署是使用nohup Rscript app.R &
进行的。这让应用程序可以远程运行并接受请求!