我正在运行一个bash脚本,除其他外,该脚本运行可以通过GUI或命令行(取决于参数)使用的Java程序。
p {
overflow-wrap: break-word;
}
编辑:
当我通过普通命令行或GUI运行它时,它运行良好。如果我将此命令splitstree --commandLineMode --commandFile comm.txt --version --verbose
放入文件,并且echo
也有效,并且在将其集成到bash脚本并运行bash脚本时,它也可以正常工作。
如果我将$(cat file)
放到我正在工作的集群中,则会收到有关显示器丢失的错误:
qsub
我尝试在bash脚本中进行java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed
an operation which requires it.
,但是错误没有改变。
编辑2:
如果我将DISPLAY变量传递给export DISPLAY=:0.0
命令,则错误消失了,但是程序以退出状态1终止。例如:
qsub
它也说qsub -v DISPLAY <job_file>
,但是对此变量执行Picked up _JAVA_OPTIONS: -Xmx4096M
并不会改变退出状态(因此很可能不会损害进程)。
在unset
外部重新运行同一命令(即:只需将cmd复制粘贴到shell中)即可再次正常工作。
关于如何使qsub
命令正确地将显示信息传递到群集节点的任何建议?
答案 0 :(得分:3)
如果不需要显示,请使用-Djava.awt.headless=true
属性运行Java,如Using Headless Mode in the Java SE Platform中所述。
或者,如果您的程序无法无头运行,则可以尝试使用Xvfb (X virtual framebuffer)。它带有xvfb-run
命令,请看Running without a Display Wiki:
xvfb-run java MainClass
或通过配置DISPLAY
环境变量:
sudo Xvfb :1 -screen 0 1024x768x24 </dev/null &
export DISPLAY=":1"
java MainClass
答案 1 :(得分:0)
在无头环境中时,您需要在代码中使用GraphicsEnvironment.isHeadless()以避免执行任何需要AWT组件的操作。当然,这意味着您无法进行任何输入/输出。