6

我想通过 plink 创建自己的变体makePSOCKclusternewPSOCKnode使用 ssh 连接。所以,我重写代码

    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 Rebelion@ClusterNode1 -pw myPasswd123 "Rscript --default-packages=datasets,utils,grDevices,stats,graphics,methods -e parallel!:::.slaveRSOCK MASTER=CLUSTERNODE1 PORT=11038 TIMEOUT=2592000 XDR=TRUE". 

这里的 ClusterNode1 是当前机器(我以 Rebelion 登录,它是管理员登录)。

但是system(cmd, wait=FALSE, input="")给了我这个:

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

我不知道为什么我会收到这个错误,我该怎么办。我将和变量设置为TMPDIR,我为除客人之外的所有类型的用户设置了最大权限。TMPTEMP%USERPROFILE%/AppData/Local/Temp

谁能帮我解决这个问题?谢谢。

4

4 回答 4

2

TMPDIR必须是实际路径,例如C:\Users\martin\AppData\Local\Temp.

它不能包含其他环境变量。

于 2017-03-02T20:37:47.003 回答
1

这看起来像是您在该远程计算机上的登录启动设置存在问题。我会尝试使以下工作(从 Windows 命令提示符):

plink -ssh Rebelion@ClusterNode1 -pw myPasswd123 "Rscript --version"

如果可行,请确保:

plink -ssh Rebelion@ClusterNode1 -pw myPasswd123 "Rscript -e 1+2"

也有效。只有到那时,才开始担心使用 R 中的并行包执行此操作。

于 2017-03-07T02:08:27.497 回答
1

使用system2调用并使用参数传递 TMPDIR 变量env

从文档:

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

env: name=value 字符串的字符向量来设置环境变量。

另外,尝试将 TMPDIR 路径作为绝对路径,例如 C:\Windows\Temp,而不是使用 CMD 环境变量。

于 2017-03-02T20:14:56.800 回答
0

谢谢你。不知道怎么给大家打分,不好意思,我真的很想给大家打赏。主要问题在于 OpenSSH 和单独的权限规则,它不允许创建具有管理员权限的会话。Novaday我可以正常运行Rscript,但parallel!:::.slaveRSOCK()部分有问题(我想,这与分隔符和路径有关,我也会很快解决这个问题)。一次又一次地感谢你。如果你知道如何给你们所有人赏金 - 请说我,我会做的。

于 2017-03-10T08:26:19.107 回答