10

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

我正在尝试编写一个将在启动/重新启动时运行的 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

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

现在,我需要在启动/重新启动机器时运行这个 shell 脚本,所以我输入 update-rc.d StartWorkers.sh defaults. 此命令似乎有效,但我收到以下警告:'update-rc.d:警告:/etc/init.d/StartWorkers.sh 缺少 LSB 信息'

但是,通过 rcconf 检查确认“StartWorkers.R”在启动列表中。

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

/编辑:好的,根据 Dirk 的回答,我安装了 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,它完美地启动了!

4

1 回答 1

8

这有点像 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 提示的一个很好的来源。

于 2011-06-17T19:48:34.493 回答