Как передать отображение команде qsub? - PullRequest
0 голосов
/ 24 октября 2018

Я запускаю скрипт bash, который, помимо прочего, запускает Java-программу, которую можно использовать через графический интерфейс или через командную строку (в зависимости от параметра).

splitstree --commandLineMode --commandFile comm.txt --version --verbose

РЕДАКТИРОВАТЬ:

Когда я запускаю его через обычную командную строку или через графический интерфейс, он работает отлично.Если я echo эту команду в файл и $(cat file), она также работает, и она работает также, когда я интегрирую ее в скрипт bash и запускаю скрипт bash.

Если я qsub отправлю его в кластер, где я выполняю работу, я получаю сообщение об ошибке отсутствующего дисплея:

java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed 
an operation which requires it.

Я попытался export DISPLAY=:0.0 в скрипте bashно ошибка не изменилась.

РЕДАКТИРОВАТЬ 2:

Если я передам переменную DISPLAY команде qsub, ошибка исчезнет, ​​но программа завершит работу с состоянием выхода 1. Подобно:

qsub -v DISPLAY <job_file>

В нем также указано Picked up _JAVA_OPTIONS: -Xmx4096M, но выполнение unset для этой переменной не изменило состояние выхода (так что, вероятно, не вредит процессу).

Повторное выполнениета же команда за пределами qsub (то есть просто скопируйте и вставьте cmd в оболочку) снова работает отлично.

Есть ли какие-либо предложения о том, как сделать так, чтобы команда qsub правильно передавала информацию отображения узлу кластера?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

В автономной среде вам необходимо использовать GraphicsEnvironment.isHeadless () в своем коде, чтобы избежать выполнения действий, требующих компонентов AWT.Это означает, что вы, конечно, не можете вводить / выводить.

0 голосов
/ 24 октября 2018

Если вам не нужен дисплей, запустите Java со свойством -Djava.awt.headless=true, как описано в Использование безголового режима в платформе Java SE .

В качестве альтернативы, если ваша программа может 't безголовый, вы можете попробовать использовать Xvfb (X виртуальный кадровый буфер) .Он поставляется с командой xvfb-run, посмотрите на Запуск без отображения wiki:

xvfb-run java MainClass

или настройку переменной среды DISPLAY:

sudo Xvfb :1 -screen 0 1024x768x24 </dev/null &
export DISPLAY=":1"
java MainClass
...