Прежде всего, это может потребоваться для перехода к суперпользователю. Я не мог решить, какое место лучше.
Я пытаюсь написать сценарий R, который будет запускаться при загрузке / перезагрузке, и добавить эту машину в пул из doRedis рабочих . (doRedis - это foreach backend).
Вот мой сценарий 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 по умолчанию
. Эта команда работает, но я получаю следующее предупреждение:
'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 ->
Execution halted
Я знаю, что в моей системе установлена многоядерная система!
/ EDIT2: Мне пришлось переместить все мои пакеты R в cd / usr / lib / R / site-library
, и теперь работает небольшой сценарий оболочки. Я добавил скрипт в /etc/rc.local
, и он отлично запускается!