首先,这可能需要移至超级用户。我无法决定哪个场地更好。
我正在尝试编写一个将在启动/重新启动时运行的 R 脚本,并将该计算机添加到池中doRedis http://cran.r-project.org/web/packages/doRedis/index.html工人。 (doRedis 是一个foreach http://cran.r-project.org/web/packages/foreach/index.html后端)。
这是我的 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 脚本从命令行运行良好,但当我尝试在启动时运行它时失败。
/编辑:好的,根据德克的回答,我安装了更少的内容,并将“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
它启动完美!