首先,这可能需要移至超级用户。我无法确定哪个场地更好。
我正在尝试编写一个将在启动/重新启动时运行的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)
我可以使用command从命令行运行此脚本 sudo R CMD BATCH ~/Rworker.R ~/RLog。
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。当我运行时,./StartWorkers.sh一切工作正常,R会话启动,工作线程被添加到池中。
chmod +x StartWorkers.sh
./StartWorkers.sh
现在,我需要这个shell脚本在引导/重新引导机器时运行,所以我键入 update-rc.d StartWorkers.sh defaults。该命令似乎有效,但是我收到以下警告:’update- rc.d:警告:/etc/init.d/StartWorkers.sh缺少LSB信息’
update-rc.d StartWorkers.sh defaults
但是,使用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,而littler shell脚本现在可以运行了。我添加了脚本/etc/rc.local,它可以完美启动!
cd /usr/lib/R/site-library
/etc/rc.local
这有点像R问题,有点像Ubuntu的系统管理问题。这里有几点:
对于简单的启动任务,我建议仅使用/etc/rc.local可以在其中添加作业的位置。
我只是不喜欢R CMD BATCH,这就是为什么我和Jeff Horner编写littler可以为您提供/usr/bin/r更轻松的R脚本的原因。R本身也给你Rscript; 谁都比R CMD BATCH。
R CMD BATCH
/usr/bin/r
Rscript
要测试脚本,只需以超级用户身份运行它们。一旦完成操作,请将其添加到中/etc/rc.local。
希望这可以帮助。该r-sig-debian列表也是Ubuntu / Debian技巧的很好来源。
r-sig-debian