Привет, я пытаюсь выполнить matlab удаленно на окнах через OpenSSH, установленный с Cygwin, но запускающийся matlab в окнах без GUI, кажется, невозможен.
Если я зарегистрирован локально, я могу запустить matlab-nodesktop-nodisplay-r сценарий, и matlab запустит разделенный вниз GUI и сделает команду.
Однако это невозможно сделать удаленно через ssh, поскольку, matlab должен отобразить GUI.
Кто-либо имеет какие-либо предложения или работает arounds?
Спасибо,
Bob
Краткая история: ваш сценарий, вызывающий exit ()? Вы используете «-wait»?
Длинная история: я думаю, вам в корне не повезло, если вы хотите с ним взаимодействовать, но это должно сработать, если вы просто хотите группировать задания. Matlab в Windows - это приложение с графическим интерфейсом, а не консольное приложение, и оно не будет взаимодействовать с удаленным подключением только для символов. Но запустить процесс можно. Matlab фактически отобразит графический интерфейс - это будет просто сеанс рабочего стола на удаленном компьютере, к которому у вас нет доступа.Но если вы можете заставить его выполнять свою работу без дополнительных действий, это можно заставить работать за некоторую ценность «работы».
Ваш ключ "-r script" - правильное направление. Но имейте в виду, что в Windows поведение Matlab "-r" заключается в том, чтобы завершить сценарий и затем вернуться в графический интерфейс, ожидая дальнейшего ввода. Вам нужно явно включить вызов «exit ()», чтобы завершить работу, и добавить try / catch, чтобы убедиться, что 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 для отладки ошибок, возникающих при выполнении задания. Файл журнала может быть буферизован, и вы потеряете вывод при зависаниях и сбоях. И так далее.
Серьезно подумайте о переносе на Linux. Matlab здесь гораздо больше подходит в качестве пакетной системы.
Если у вас есть деньги или свободные лицензии, вы также можете использовать набор инструментов и сервер распределенных вычислений Matlab для запуска кода на удаленных рабочих узлах. Это может работать для распараллеливания или для удаленных пакетных заданий.
Есть два недокументированных хака, которые, как сообщается, решают аналогичную проблему - они не гарантируют решения вашей конкретной проблемы, но их стоит попробовать. Оба они зависят от изменения файла java.opts :
-Dsun.java2d.pmoffscreen = false Установка этого параметра устраняет проблему чрезмерной медлительности графического интерфейса при запуске Matlab. на удаленном компьютере Linux / Solaris.
-Djava.compiler = NONE Этот параметр отключает JITC-компилятор Java. Обратите внимание, что это не влияет на интерпретатор Matlab JITC. Эффект аналогичен запуску Matlab с параметром командной строки «–nojvm». Обратите внимание, что это предотвращает многие возможности графического интерфейса пользователя Matlab . К сожалению, в некоторых случаях альтернативы нет. Например, при запуске на удаленной консоли или при запуске выпусков Matlab до 2007 г. на компьютерах Mac на базе Intel . В таких случаях использование недокументированной опции командной строки '-noawt', которая включает JVM, но предотвращает использование графического интерфейса JAVA, является предлагаемым компромиссом .