在启动时运行R脚本

首先,这可能需要转移到超级用户。 我无法决定哪个场地更好。

我正在尝试编写一个R脚本,该脚本将在引导/重新启动时运行,并将该计算机添加到doRedis工作者池中。 (doRedis是一个foreach后端)。

这是我的R脚本,“〜/ Rworker.R”

#Define Parameters require(multicore) Host <- 'ip_of_doRedis_Server' cores <- multicore:::detectCores() TO <- 24*3600 #Start Workers require('doRedis') startLocalWorkers(cores,'jobs',host=Host,port=6379, timeout = TO) 

我可以使用命令sudo R CMD BATCH ~/Rworker.R ~/RLog从命令行运行这个脚本。

接下来,我编写了一个shell脚本来运行R脚本,标题为“/etc/init.d/StartWorkers.sh”

 #!/bin/sh sudo echo "Starting R workers" sudo R CMD BATCH ~/Rworker.R ~/RLog 

我使用chmod +x StartWorkers.sh使这个shell脚本可执行。 当我运行./StartWorkers.sh一切正常,R会话启动,工作人员被添加到池中。

现在,我需要这个shell脚本来运行,当我启动/重新启动机器,所以我inputupdate-rc.d StartWorkers.sh defaults 。 此命令似乎工作,但我得到以下警告:'update-rc.d:warning:/etc/init.d/StartWorkers.sh缺lessLSB信息'

但是,使用rcconf进行检查可确认“StartWorkers.R”在启动列表中。

但是,当我重新启动机器时,脚本无法运行。 我究竟做错了什么? shell脚本从命令行运行正常,但是当我尝试在启动时运行它时失败。

/编辑:好的,根据德克的回答,我安装了littler,并将“StartWorkers.sh”更改为以下内容:

 #! /usr/bin/r #Define Parameters require(multicore) Host <- 'zachec2.dyndns.org' cores <- multicore:::detectCores() TO <- 24*3600 #Start Workers require('doRedis') startLocalWorkers(cores,'jobs',host=Host,port=6379, timeout = TO) 

但是当我运行它时,我得到以下输出:

 Loading required package: utils Loading required package: multicore Warning message: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : there is no package called 'multicore' Error in loadNamespace(name) : there is no package called 'multicore' Calls: ::: ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous> Execution halted 

我知道我的系统上安装了多核心!

/ EDIT2:我不得不把所有的R包都移动到cd /usr/lib/R/site-library ,现在小文件的shell脚本可以工作。 我添加了脚本到/etc/rc.local ,它启动完美!

这是一个R的问题,在Ubuntu的系统管理问题上有一点点。 这里有几点:

  1. 对于简单的启动任务,我建议仅使用/etc/rc.local在其中添加作业。

  2. 我只是不喜欢R CMD BATCH ,这就是为什么Jeff Horner和我写小文件给了你/usr/bin/r并且更容易的R脚本。 R本身也给你Rscript ; 任何一个比R CMD BATCH更可取。

  3. 要测试脚本,只需以root身份运行它们。 一旦他们工作,将他们添加到/etc/rc.local

希望这可以帮助。 r-sig-debian列表也是Ubuntu / Debian提示的一个很好的来源。