当使用-nodesktop
选项通过cronjob运行函数时,我在解决matlab图时遇到问题。该函数绘制并保存(使用打印功能)一些数字。从matlab桌面运行时,它们根据指定的分辨率进行绘图和保存,没有任何问题。但是当通过带有-nodesktop
选项的cronjob运行时,分辨率非常差(低)。
这基本上就是我目前正在做的事情:
fh = figure;
set(fh,'Position',[0 0 1360 470]);
plot(somedata);
print(fh,'-dpng',figpath,'-painters');
请注意,我也尝试过指定打印分辨率:
print(fh,'-dpng',figpath,'-r300');
但这最终会导致文件损坏。我不知道为什么。我正在使用-painters
,因为我在某处读到如果情节有点复杂,它可以默认为opengl
,这会破坏打印但这似乎不是问题(有或没有选项,情节是一样的。)
我也试过了:
set(fh,'PaperPositionMode','auto')
并没有解决问题。
cronjob运行以下命令:
/usr/local/bin/matlab -nodesktop -r "startup; perform_plots; exit"
非常感谢任何帮助!
答案 0 :(得分:1)
我想出了这个问题。
通过运行matlab作为cronjob,未设置DISPLAY环境变量。因此,没有X显示器可供matlab使用。我不知道它是如何设法绘制任何东西的,但是确实如此,并且分辨率非常低。
解决方案是预先设置适当的显示。 e.g:
#!/bin/bash
export DISPLAY=:1.0
/usr/local/bin/matlab -nodesktop -r "startup; perform_plots; exit"
如果要在没有X服务器的盒子上运行它,可以使用Xvfb(X虚拟帧缓冲区)设置虚拟X服务器。这样做的好处是可以使用与您可能正在处理的显示器分开的显示器,这样就可以在后台运行作业,而无需在工作时随机出现。