Запустить скрипт R при загрузке - PullRequest
9 голосов
/ 17 июня 2011

Прежде всего, это может потребоваться перенести в суперпользователя.Я не мог решить, какое место было лучше.

Я пытаюсь написать сценарий 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.

Далее я написал сценарий оболочки для запуска сценария 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-сессия, и рабочие добавляются в пул.

Теперь мне нужен этот сценарий оболочки для запуска при загрузке / перезагрузке компьютера, поэтому я набираюupdate-rc.d StartWorkers.sh defaults.Эта команда работает, но я получаю следующее предупреждение: «update-rc.d: warning: /etc/init.d/StartWorkers.sh отсутствует информация о LSB»

Однако проверка с помощью rcconf подтверждает, что«StartWorkers.R» находится в списке автозагрузки.

Однако, когда я перезагружаю машину, скрипт не запускается.Что я делаю неправильно?Сценарий оболочки работает нормально из командной строки, но завершается неудачно, когда я пытаюсь запустить его при запуске.

/ EDIT: хорошо, согласно ответу Дирка, я установил 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 работает.Я добавил скрипт к /etc/rc.local, и он отлично запускается!

1 Ответ

8 голосов
/ 17 июня 2011

Это вопрос R, а также вопрос системного администратора Ubuntu.Вот несколько моментов:

  1. Для простых задач запуска я рекомендовал просто использовать /etc/rc.local, где вы можете добавлять свои задания.

  2. Мне просто не нравится R CMD BATCH, поэтому мы с Джеффом Хорнером написали littler , который дает вам /usr/bin/r и значительно упрощает R-скриптинг.Сам R также дает вам Rscript;Любой из них предпочтительнее, чем R CMD BATCH.

  3. Чтобы протестировать сценарии, просто запустите их от имени пользователя root.Как только они начнут работать, добавьте их в /etc/rc.local.

Надеюсь, это поможет.Список r-sig-debian также является хорошим источником советов по Ubuntu / Debian.

...