在Linux服务器节点上而不在头节点上时,PNG图像会产生错误

时间:2019-03-04 16:18:13

标签: r linux server

我的最终目标是在大学的Linux服务器上渲染R Markdown文档,该服务器使用SLURM进行队列管理。但是,使用PNG图形设备会产生错误,而PDF图形设备会提供不适当的输出。

请注意,我有一台Windows计算机,并且正在使用PuTTY与服务器进行通信。已安装Xming,并且PuTTY已启用X11转发。

我跑步时

salloc --ntasks 1 --partition <partition_name>
srun Rscript -e "png('test.png'); plot(1,1); dev.off()"` 

没有保存情节,我收到以下警告消息:

  

1:在png(“ test.png”)中:

     
    

无法加载共享对象'/ opt / exp_soft / R- 3.5.2 / lib64 / R / library / grDevices / libs // cairo.so':     /lib64/libcairo.so.2:未定义符号:FT_Get_Var_Design_Coordinates

  
     

2:在png(“ test.png”)中:无法加载cairo DLL

     

空设备

但是,当我仅删除srun命令并运行

salloc --ntasks 1 --partition <partition_name>
srun Rscript -e "png('test.png'); plot(1,1); dev.off()"` 

然后保存文件test.png。另外,输出PDF而不是PNG也会正确生成图(Rscript -e "pdf( 'test.pdf'); plot(1,1); dev.off()")。

以相同的方式,在开始时使用Rscript -e "('test.Rmd')"而不使用srun渲染Rmd文档将正确地渲染Rmd文档。但是将srun放在开头将不会生成Rmd文档,而只会生成警告消息:

  

在资源路径中找不到文件test2_files / figure-html / unnamed-chunk-1-1.svg

     

错误:pandoc文档转换失败,错误代码为99

     

此外:警告消息:

     

1:在grDevices :: png(f)中:     无法加载共享库'/opt/exp_soft/R-3.5.2/lib64/R/library/grDevices/libs//cairo.so':     /lib64/libcairo.so.2:未定义符号:FT_Get_Var_Design_Coordinates

     

2:在grDevices :: png(f)中:无法加载cairo DLL

     

3:在(函数(文件名= if(一个文件)“ Rplots.svg”否则“ Rplot%03d.svg”,中:     无法加载cairo DLL

     

执行停止

     

运行:错误:srvcnthpc100:任务0:退出,退出代码为1

如果我将dev='pdf'设置为knitr chunk选项,则呈现Rmd文档,但是html文档中的图形非常奇怪,因为它具有滚轮和灰色背景(dev_equals_png_rmd_output )。

我注意到上面的错误消息“ FT_Get_Var_Design_Coordinates”中的“未定义符号”是FreeType库的一部分。但是,我不确定这可能意味着什么,或者如果它意味着某些事情,我会怎么做。

我重新安装了Cairo R软件包,但这并没有改变错误消息。

由于PNG图像呈现在头节点(即没有srun)上,而不是在服务器节点上(即具有srun)上渲染,所以在我看来通信中有些问题RSLURM和服务器节点之间,而不是缺少某些文件或程序。

我还认为pandoc会引发错误,因为运行R代码时未生成png图像。

请注意,当使用sbatch而不是srun时,也会产生上述错误(即,代码以批处理方式而不是交互方式运行)。

任何帮助将不胜感激!我对使用Linux很陌生,并且开始喜欢它!

在服务器上运行Rscript -e "sessionInfo()"会产生:

  

R版本3.5.2(2018-12-20)

     

平台:x86_64-pc-linux-gnu(64位)

     

在以下操作系统上运行:CentOS Linux 7(核心)

     

Matrix产品:默认   BLAS:/usr/lib64/libblas.so.3.4.2   LAPACK:/usr/lib64/liblapack.so.3.4.2

     

语言环境:

     

1 LC_CTYPE = zh_CN.UTF-8 LC_NUMERIC = C

     

[3] LC_TIME = zh_CN.UTF-8 LC_COLLATE = zh_CN.UTF-8

     

[5] LC_MONETARY = en_US.UTF-8 LC_MESSAGES = en_US.UTF-8

     

[7] LC_PAPER = zh_CN.UTF-8 LC_NAME = C

     

[9] LC_ADDRESS = C LC_TELEPHONE = C

     

[11] LC_MEASUREMENT = zh_CN.UTF-8 LC_IDENTIFICATION = C

     

附带的基本软件包:   1统计图形grDevices utils数据集方法基础

     

其他附件包:   1 rmarkdown_1.11

     

通过名称空间(未附加)加载:   1编译器_3.5.2工具_3.5.2 htmltools_0.3.6 Rcpp_1.0.0   [5] knitr_1.21 xfun_0.5摘要_0.6.18评价_0.13

运行Rscript -e capabilities()时,我得到以下信息:

jpeg         png        tiff       tcltk         X11        aqua
TRUE        TRUE        TRUE        TRUE       TRUE       FALSE
http/ftp     sockets      libxml        fifo      cledit       iconv
TRUE        TRUE        TRUE        TRUE       FALSE        TRUE
NLS     profmem       cairo         ICU long.double     libcurl
TRUE       FALSE        TRUE        TRUE        TRUE        TRUE

1 个答案:

答案 0 :(得分:0)

因此,问题确实出在FreeType上。以前的FreeType库已损坏(不确定确切意义是什么,但这是系统管理员说的话),并且系统管理员已推出更新并固定的FreeType。但是,他偶然地只在测试的头节点和服务器节点上执行了此操作。一旦他更新了整个集群,代码就会按预期运行。直接的PNG图和带有图形的Rmd文档渲染都可以正常工作。