首先,这可能需要移动到超级用户。我无法决定哪一个场地更好。
我正在尝试编写一个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脚本,所以我输入update-rc.d StartWorkers.sh defaults。此命令似乎可以工作,但我收到以下警告:'update-rc.d: warning: /etc/init.d/StartWorkers.sh missing LSB information‘
然而,与rcconf的检查确认"StartWorkers.R“在启动列表中。
但是,当我重新启动机器时,该脚本无法运行。我做错了什么?shell脚本从命令行运行得很好,但是当我尝试在启动时运行它时会失败。
/EDIT:好的,根据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中,它可以完美地启动!
发布于 2011-06-18 03:48:34
这是一个有点R的问题,也是一个Ubuntu系统挖掘的问题。以下是几点:
/etc/rc.local,在那里你可以添加你的工作。R CMD BATCH,这就是为什么Jeff Horner和我写了littler,它为你提供了/usr/bin/r和更容易的R脚本。R本身也为您提供根;与R CMD BATCH.Rscript身份运行它们即可。创建完成后,将它们添加到/etc/rc.local.希望这能有所帮助。r-sig-debian列表也是一个很好的Ubuntu / Debian技巧来源。
https://stackoverflow.com/questions/6390913
复制相似问题