2017-02-21 3 views
6

Я хочу создать свой собственный вариант makePSOCKcluster и newPSOCKnode, используя ssh-соединение через plink. Итак, я переписать кодRscript работает с TMPDIR через plink -ssh на Windows

if (machine != "localhost") { 
     rshcmd <- getClusterOption("rshcmd", options) 
     user <- getClusterOption("user", options) 
     cmd <- shQuote(cmd) 
     cmd <- paste(rshcmd, "-l", user, machine, cmd) 
    } 
    if (.Platform$OS.type == "windows") { 
     system(cmd, wait = FALSE, input = "") 
    } 
    else system(cmd, wait = FALSE) 

мой вариант, который дает мне cmd как это:

plink -ssh [email protected] -pw myPasswd123 "Rscript --default-packages=datasets,utils,grDevices,stats,graphics,methods -e parallel!:::.slaveRSOCK MASTER=CLUSTERNODE1 PORT=11038 TIMEOUT=2592000 XDR=TRUE". 

ClusterNode1 здесь является текущая машина (я вошел в Ребельон, что это Войти администратор).

Но system(cmd, wait=FALSE, input="") дает мне это:

Fatal error: creation of tmpfile failed -- set TMPDIR suitably? 

Я не знаю, почему я получаю эту ошибку, и что я должен делать. Я установил TMPDIR, TMP и TEMP переменными как %USERPROFILE%/AppData/Local/Temp, я установил привилегии на максимум для всех пользователей, кроме гостей.

Может ли кто-нибудь помочь мне решить эту проблему? Thnxs.

+0

Как-то система или команда plink не работают с административной привилегией.Попробуйте дать все полные разрешения в настроенном каталоге temp и дать ему снимок. – SACn

ответ

1

Использовать system2 вызывать и передавать переменную TMPDIR с использованием аргумента env.

Из документации:

system2(command, args = character(), stdout = "", stderr = "", stdin = "", input = NULL, env = character(), wait = TRUE, minimized = FALSE, invisible = TRUE)

env: символьный вектор строк имя = значение для установки переменных окружения.

Кроме того, попробуйте указать путь TMPDIR как абсолютный путь, такой как C: \ Windows \ Temp, вместо использования переменных среды CMD.

+0

'env' устанавливает переменные среды для выполняемого подпроцесса. В то время как для OP переменная отсутствует для текущего процесса Rscript. –

2

TMPDIR должен быть фактическим путем, например C:\Users\martin\AppData\Local\Temp.

Он не может содержать другие переменные среды.

1

Это похоже на проблему с настройкой входа в систему на этом удаленном компьютере. Я хотел бы попытаться получить следующую работу (из командной строки Windows):

plink -ssh [email protected] -pw myPasswd123 "Rscript --version" 

и если это работает, убедитесь, что:

plink -ssh [email protected] -pw myPasswd123 "Rscript -e 1+2" 

также работает. Только тогда начните беспокоиться об этом с помощью параллельного пакета в R.

0

спасибо. Я не знаю, как дать вам все, извините, но я действительно хочу дать вам щедрость. Основная проблема была в OpenSSH и отдельном правиле правил, что не позволяет создавать сеанс с правами администратора. Novaday Я могу нормально запускать Rscript, но имею проблему с частью parallel!:::.slaveRSOCK() (я полагаю, это связано с разделителями и путями, я тоже скоро разрешу эту проблему). Спасибо снова и снова. Если вы знаете, как дать вам щедрость - скажите мне, я сделаю.

+0

Приятно слышать, что вы поняли! Разделение щедрот между несколькими ответами невозможно, но можно присудить еще одну награду другой награде, см. Https://meta.stackoverflow.com/a/261423/119918. – Olli

+0

Можете ли вы точно определить, что вы подразумеваете под «Я могу запустить Rscript обычно», например. показать полный вызов, который вы делаете из командной строки, и какой результат. Это помогает нам знать, где вы и что отсутствует. – HenrikB

Смежные вопросы