当前位置: 首页 > 面试题库 >

在启动时运行R脚本

公西毅
2023-03-14
问题内容

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

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

接下来,我编写了一个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会话启动,工作线程被添加到池中。

现在,我需要这个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,而littler
shell脚本现在可以运行了。我添加了脚本/etc/rc.local,它可以完美启动!


问题答案:

这有点像R问题,有点像Ubuntu的系统管理问题。这里有几点:

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

  2. 我只是不喜欢R CMD BATCH,这就是为什么我和Jeff Horner编写littler可以为您提供/usr/bin/r更轻松的R脚本的原因。R本身也给你Rscript; 谁都比R CMD BATCH

  3. 要测试脚本,只需以超级用户身份运行它们。一旦完成操作,请将其添加到中/etc/rc.local

希望这可以帮助。该r-sig-debian列表也是Ubuntu / Debian技巧的很好来源。



 类似资料:
  • 本文向大家介绍在Windows启动时自动运行Python脚本?,包括了在Windows启动时自动运行Python脚本?的使用技巧和注意事项,需要的朋友参考一下 将Python脚本添加到Windows启动时,基本上表示Python脚本将在Windows启动时运行。这可以通过两步过程来完成- 步骤#1:在Windows启动文件夹中添加或添加脚本 在启动Windows后,它会执行(相当于双击)其启动文件

  • 问题内容: 在Amazon S3 Linux实例上,我有两个名为的脚本,它们 永远 启动和停止(依次运行Node.js应用程序)。我使用这些脚本手动启动和停止我的Node.js应用程序。到目前为止,一切都很好。 我的问题:我还想将其设置为在系统启动时运行。我知道我需要在其中添加文件,并且知道如何将其符号链接到其中的适当目录,但是我无法弄清楚放置在其中的文件中实际需要什么。我认为这应该只是一条线,例

  • 我试图在启动时运行我python脚本,但它不起作用。 下面是我的python脚本(不起作用): 这是我的python脚本(works): 下面是我的rc.local文件(也可以尝试crontab并在/ect/init.d中设置服务): 看起来通过导入paho.mqtt.发布可以让我的脚本停止工作,我是Linux的新手,我不知道为什么。有人可以帮助我吗?感谢您的帮助。 Ubuntu 16.04 如果

  • 问题内容: 我的用例是我想初始化文件中的某些函数,然后使用定义的那些函数启动ipython。有什么办法可以做 问题答案: 根据文档,这很简单: 使用以下命令启动IPython: 如果不带选项调用,它将执行顺序列出的所有文件,并将您放入解释器,同时仍然确认您可能在文件中设置的任何选项 。此行为与标准Python不同,标准Python在被称为as时只会执行一个文件,而忽略您的配置设置。 所以,只需使用

  • 我在尝试从Java运行R脚本时遇到了一个问题。我真的在互联网上寻找这个问题的答案,但什么都不管用。 求你帮帮我 这是java代码 以下是当我添加Runtime.getRuntime(). exec("Rcript"rScriptFileName)时抛出的错误消息:

  • 我想在我的Parallela板启动时运行一个bash脚本,它有Ubuntu。我搜索了SO,在这里找到了说明: 在linux ubuntu下启动时自动运行程序 在Linux上启动时以编程方式运行 我的bash脚本是test。sh,只有一行: 1) 我尝试的第一种方法是添加到脚本的aboslute路径: 2) 我尝试的第二种方法是遵循上面公认的答案。 在这两种情况下,脚本都是在引导后执行的,并且有一个