你好,我试图通过安装了Cygwin的OpenSSH在Windows上远程运行matlab,但是在没有GUI的情况下在windows中启动matlab似乎是不可能的。
如果我在本地登录,我可以启动matlab -nodesktop -nodisplay -r脚本,matlab将启动一个精简的GUI并执行命令。
但是,这不可能通过ssh远程执行,因为matlab需要显示GUI。
有没有人有任何建议或解决方法?
谢谢,
鲍勃
答案 0 :(得分:3)
短篇小说:你的脚本是否调用exit()?你在使用“-wait”吗?
长篇小说:如果您想要与之互动,我认为您从根本上说运气不好,但如果您只想批量处理工作,这应该会有效。 Windows上的Matlab是一个GUI应用程序,而不是控制台应用程序,并且不会与仅字符的远程连接进行交互。但是你仍然可以启动这个过程。 Matlab实际上会显示GUI - 它只是在您无法访问的远程计算机上的桌面会话中。但是如果你能够在没有进一步投入的情况下完成你的工作,那么就可以使其工作,为“工作”的某些价值。
您的“-r脚本”开关是正确的方向。但是要意识到在Windows上,Matlab的“-r”行为是完成脚本然后返回GUI,等待进一步的输入。您需要明确包含“exit()”调用以完成工作,并添加try / catches以确保达到exit()。此外,您应该使用“-logfile”开关将所有命令窗口输出的副本捕获到日志文件中,以便您可以看到它正在执行的操作(因为您无法看到GUI)并且具有先前运行的记录。
此外,matlab.exe默认是异步的。你的ssh调用将启动Matlab并立即返回,除非你添加“-wait”开关。检查您正在搜索的机器上的进程; Matlab实际上可能正在运行。添加-wait如果要阻止它直到完成。
执行此操作的一种方法是使用-r调用标准作业包装器脚本,该脚本初始化库和路径,运行作业,并进行清理和退出。您还需要创建一个.bat包装器,将-logfile开关设置为指向包含作业名称,时间戳和其他信息的文件。在M代码级别这样的东西。
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或其他远程访问下以相同的方式工作。
像这样的Windows上的Matlab批处理系统很脆弱且难以管理。 Windows上的Matlab从根本上说不是无头批量执行系统;关于交互式GUI的假设很普遍,很难解决。低级错误或许可证错误将弹出模式对话框并挂起您的工作。 Matlab启动序列似乎有竞争条件。您无法设置MATLAB.exe的退出状态。没有办法进入Matlab GUI来调试作业抛出的错误。日志文件可能会被缓冲,并且您会在挂起和崩溃附近丢失输出。等等。
认真考虑移植到Linux。 Matlab更适合作为批处理系统。
如果您有资金或备用许可证,您还可以使用Matlab分布式计算工具箱和服务器在远程工作线程节点上运行代码。这可以用于并行化或远程批处理作业。
答案 1 :(得分:1)
据报道,有两个无证件的黑客修复了类似的问题 - 他们不保证解决您的特定问题,但值得一试。它们都依赖于modifying the java.opts file:
-Dsun.java2d.pmoffscreen=false 设置此选项可修复在远程Linux / Solaris计算机上启动Matlab时极端GUI缓慢的问题。
-Djava.compiler=NONE 此选项禁用Java即时编译器(JITC)。请注意,它对Matlab解释器JITC没有影响。它与使用'-nojvm'命令行选项运行Matlab具有类似的效果。请注意这个prevents many of Matlab's GUI capabilities。不幸的是,在某些情况下没有其他选择。例如,在远程控制台上运行或运行pre-2007 Matlab releases on Intel-based Macs时。在这种情况下,使用未记录的'-noawt'命令行选项,它启用JVM但阻止JAVA GUI,是suggested compromise。
答案 2 :(得分:0)
使用putty使用ssh -X remote“matlab”它应该可以工作
答案 3 :(得分:-1)
下载&免费使用(个人使用)。
允许U远程登录并访问您的桌面GUI。 (针对低带宽连接进行了优化)