0

考虑到我已经构建了我的应用程序,如下面的示例所示:

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 作为依赖项提供,但我没有更改任何内容或自定义任何配置文件。

4

2 回答 2

2

查看源代码,我建议将命名参数添加background=TRUEbackend$start(app, http_port = 8080). 此参数默认为 FALSE(第 36 行),当为 TRUE 时,Rserve 将在新的分离 R 会​​话中启动(第 93 行)。(顺便说一句,省略所述参数,您可以通过保持第二个 SSH 连接打开并使用过滤器列出正在运行的进程来检查断开连接是否会终止您正在运行的 R 会话:ps aux | grep bin/exec/R断开连接之前和之后)

如果使用所述参数有效,您可能还想查看服务器重新启动。从外观上看,我会说 RestRserve 实际上无法自行处理,您可能需要一个小型服务脚本。

于 2020-07-29T17:11:51.860 回答
1

I solved with the help of rexy.ai and karo: The correct script uses backend$start(app, http_port = 8080) (with no background option) but the deployment is made using nohup Rscript app.R &. This let the app run remotely and accept requests!

于 2020-07-31T08:57:40.207 回答