首页 > 解决方案 > R beakr 脚本作为 Rscript Windows 10 服务

问题描述

我正在尝试在 Windows 中设置一个简单的beakr服务,以实现https://github.com/MazamaScience/beakr上的示例。我能够从命令行成功运行脚本,并且能够使用 NSSM 在 Windows 中添加服务,但我无法启动该服务。

当我深入研究服务错误日志时,我发现Rscript.exe由于非特定权限问题而无法执行。

我的Rscript.exe用完了C:\Program Files\R<Version>\bin并且我的beakr.R脚本用完了我的用户主目录。

如果有人在 Windows 中使用 R 成功实现了类似的服务(基于网页的 REST 端点),我很想知道您是如何做到的。

标签: rwindowsservicerscript

解决方案


这是我在 Windows 10 上使用NSSM 的最新预发布版本运行 R 脚本作为服务所做的:

  1. 创建一个目录来存储文件
    在这个例子中:C:\R\ServiceTest

  2. 在此目录中创建一个永无止境的脚本:ServiceTest.R

library(beepr)

# Test script : beeps every 10 seconds
while (T) {
  beepr::beep(1)
  if (interactive()) {
    # Shows spin cursor to facilitate test in interactive mode
    for (i in 1:10) {
      if (i%%4==0) {cursor <- '/'}
      if (i%%4==1) {cursor <- '-'}
      if (i%%4==2) {cursor <- '\\'}
      if (i%%4==3) {cursor <- '|'}
      cat('\r',cursor)
      flush.console() 
      Sys.sleep(1)
    } 
  } else {
    Sys.sleep(10)
  }
}

我曾经让这种脚本在我桌面上打开的控制台中运行,以定期检查各种警报。

  1. 创建一个批处理文件来运行脚本:ServiceTest.bat
Rscript ServiceTest.R
  1. 打开管理控制台并确保批处理文件正确运行:
C:\R\ServiceTest>ServiceTest.bat

C:\R\ServiceTest>Rscript ServiceTest.R
 |

取消批处理 (Ctrl+C)

  1. 使用管理控制台,使用 NSSM 将批处理文件安装为服务:
nssm install

在此处输入图像描述

  • 设置服务名称:ServiceTest
  • 设置应用程序路径:C:\R\ServiceTest\ServiceTest.bat
  • 设置工作目录:C:\R\ServiceTest\
  • 设置登录:Windows用户+密码
  • 安装服务
  1. 打开 Windows 服务管理器,找到ServiceTest并启动它:如果一切顺利,就是这样!

  2. 如果您收到错误消息,请检查 Windows 事件日志/服务:您可以找到有关问题原因的提示。我遇到的最常见的问题:

  • 路径错误
  • 使用本地用户而不是自己的用户帐户/密码来运行服务
  1. 如果要删除服务:
nssm remove ServiceTest

这很好地取代了我在桌面后台运行的许多 R 控制台。
我看不出它不能与 REST 端点一起使用的原因。


推荐阅读