Удаленный запуск Matlab на Windows через SSH? Невозможно? - PullRequest
5 голосов
/ 18 апреля 2010

Привет, я пытаюсь запустить Matlab на Windows удаленно через OpenSSH, установленный с Cygwin, но запуск Matlab в Windows без графического интерфейса кажется невозможным.

Если я вошел в систему локально, я могу запустить скрипт matlab -nodesktop -nodisplay -r, и matlab запустит урезанный графический интерфейс и выполнит команду.

Однако это невозможно сделать удаленно через ssh, так как matlab должен отображать графический интерфейс.

У кого-нибудь есть предложения или обходные пути?

Спасибо

Bob

Ответы [ 4 ]

3 голосов
/ 19 апреля 2010

Короткая история: ваш скрипт вызывает exit ()? Вы используете "-wait"?

Длинная история: я думаю, что вам в принципе не повезло, если вы хотите с ним взаимодействовать, но это должно сработать, если вы просто хотите сгруппировать задания. Matlab в Windows - это приложение с графическим интерфейсом, а не консольное приложение, и оно не будет взаимодействовать только с символьным удаленным подключением. Но вы все равно можете запустить процесс. Matlab на самом деле отобразит графический интерфейс - он будет просто на сеансе рабочего стола на удаленном компьютере, к которому у вас нет доступа. Но если вы можете заставить его выполнять свою работу без дополнительного вклада, это можно заставить работать, для некоторого значения «работа».

Ваш переключатель "-r script" - верное направление. Но поймите, что в Windows поведение «-r» в Matlab заключается в завершении сценария и возвращении в графический интерфейс, ожидая дальнейшего ввода. Вам необходимо явно включить вызов exit (), чтобы завершить работу, и добавить try / catches, чтобы убедиться, что exit () достигнут. Кроме того, вы должны использовать ключ «-logfile», чтобы записать копию всех выходных данных командного окна в файл журнала, чтобы вы могли видеть, что он делает (так как вы не можете видеть графический интерфейс), и иметь запись предыдущих запусков.

Кроме того, matlab.exe по умолчанию является асинхронным. Ваш ssh вызов запустит Matlab и вернется сразу же, если вы не добавите ключ "-wait". Проверьте процессы на машине, на которой вы работаете; Matlab на самом деле может быть запущен. Добавьте -wait, если хотите, чтобы он блокировался до завершения.

Один из способов сделать это - просто использовать -r для вызова стандартного сценария оболочки задания, который инициализирует ваши библиотеки и пути, запускает задание, выполняет очистку и выход. Вы также захотите создать оболочку .bat, которая устанавливает переключатель -logfile, чтобы он указывал на файл с именем задания, отметкой времени и другой информацией. Примерно так на уровне М-кода.

function run_batch_job(jobname)
try
   init_my_matlab_library(); % By calling classpath(), javaclasspath(), etc
   feval(jobname); % assumes jobname is an M-file on the path
catch err
   warning('Error occurred while running job %s: %s', jobname, err.message)
end
try
   exit();
catch err
   % Yes, exit() can throw errors
   java.lang.System.exit(1); % Scuttle the process hard to make sure job finishes
end
% If your code makes it to here, your job will hang

Я настраивал системы пакетных заданий, используя этот стиль в Windows Scheduler, Tidal и TWS. Я думаю, что он должен работать так же, как с помощью SSH или другого удаленного доступа.

Пакетная система Matlab в Windows, подобная этой, хрупка и сложна в управлении. Matlab на Windows принципиально не создан, чтобы быть системой безголового пакетного выполнения; предположения об интерактивном графическом интерфейсе распространены в нем и трудны для обхода. Низкоуровневые ошибки или лицензионные ошибки вызовут модальные диалоговые окна и повесят вашу работу. Последовательность запуска Matlab, похоже, имеет гоночные условия. Вы не можете установить статус выхода MATLAB.exe. Нет никакого способа получить в Matlab GUI для отладки ошибок, которые выдает работа. Файл журнала может быть буферизован, и вы теряете вывод из-за зависаний и сбоев. И так далее.

Серьезно подумайте о портировании на Linux. Matlab гораздо более подходит в качестве системы периодического действия.

Если у вас есть деньги или запасные лицензии, вы также можете использовать набор инструментов и сервер распределенных вычислений Matlab для запуска кода на удаленных рабочих узлах. Это может работать для распараллеливания или для удаленных пакетных заданий.

1 голос
/ 18 апреля 2010

Существует два недокументированных хака, которые, по сообщениям, решают аналогичную проблему - они не гарантируют решение вашей конкретной проблемы, но их стоит попробовать. Они оба зависят от изменения файла java.opts :

  1. -Dsun.java2d.pmoffscreen = ложь Установка этого параметра устраняет проблему крайней медлительности графического интерфейса при запуске Matlab на удаленном компьютере Linux / Solaris.

  2. -Djava.compiler = NONE Эта опция отключает Java-компилятор "точно в срок" (JITC). Обратите внимание, что это не влияет на интерпретатор Matlab JITC. Это похоже на запуск Matlab с параметром командной строки '-nojvm'. Обратите внимание, что это предотвращает многие возможности Matlab с графическим интерфейсом . К сожалению, в некоторых случаях альтернативы нет. Например, при работе на удаленной консоли или при запуске выпусков Matlab до 2007 года на компьютерах Mac с процессором Intel . В таких случаях использование недокументированного параметра командной строки '-noawt', который включает JVM, но предотвращает JAVA GUI, является предлагаемым компромиссом .

0 голосов
/ 12 сентября 2013

Используя шпаклевку, используйте ssh -X remote "matlab", она должна работать

0 голосов
/ 18 апреля 2010

TeamViewer

Загрузить и использовать бесплатно (для личного пользования).

Позволяет U удаленно входить в систему и получать доступ к графическому интерфейсу пользователя Desktop.(Оптимизировано для соединений с низкой пропускной способностью)

http://www.teamviewer.com/index.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...