我有一个octave
脚本,它调用R
脚本在 HPC 集群上进行一些计算。计算过程如下:
-
在群集上提交作业以获取分配的计算节点,然后将计算分发到该节点中的每个 CPU。外壳脚本的一部分如下所示
count=0 HOSTLIST= for host in `cat $PBS_NODEFILE` do HOSTLIST[$count]=$host count=$(($count+1)) done ... ... ... mkdir case_$count cd case_$count export workdir=`pwd` remotehost=${HOSTLIST[$pcount]} ssh -n $remotehost "cd $workdir; export PATH=$PATH:$workdir; octave $MFILE > /dev/null" &
-
为简单起见,示例
$MFILE
内容为printf("Calling R script from Octave n"); system('./hello_world.R');
-
hello_world.R
#!/usr/bin/Rscript print("Hello World!")
-
运行时遇到错误
sh: ./hellow_world.R: /usr/bin/Rscript: bad interpreter: No such file or directory
-
我的一些环境变量(以防万一(
$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/cuda/bin:/opt/ganglia/bin:/opt/ganglia/sbin:/usr/java/latest/bin:/opt/maven/bin:/opt/maui/bin:/opt/torque/bin:/opt/torque/sbin:/opt/pvfs2/bin:/opt/rocks/bin:/opt/rocks/sbin $ which Rscript /usr/bin/Rscript $ which R /usr/bin/R
如果我从命令行运行$MFILE
,它工作正常并且可以很好地打印所需的输出。我尝试了许多可以在网上找到的解决方案,但无济于事
有人知道出了什么问题吗?感谢您的任何建议!
问题是 R 已加载到登录节点上,但未加载到计算节点上。因此,在作业提交脚本中,在执行任何计算之前,必须有一行要加载R
。例如:
module load r/3.4.3
在此处和此处查看更多信息