Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过ssh在windows上远程启动matlab?不可能的?_Matlab_Ssh - Fatal编程技术网

通过ssh在windows上远程启动matlab?不可能的?

通过ssh在windows上远程启动matlab?不可能的?,matlab,ssh,Matlab,Ssh,你好,我正试图通过安装了Cygwin的OpenSSH在windows上远程运行matlab,但是在没有GUI的windows中启动matlab似乎是不可能的 如果我在本地登录,我可以启动matlab-nodesktop-nodisplay-r脚本,matlab将启动一个精简的GUI并执行该命令 但是,这不可能通过ssh远程完成,因为matlab需要显示GUI 有人有什么建议或解决办法吗 谢谢 Bob据报道,有两种未经记录的黑客可以解决类似的问题——它们不能保证解决您的特定问题,但值得一试。这两者

你好,我正试图通过安装了Cygwin的OpenSSH在windows上远程运行matlab,但是在没有GUI的windows中启动matlab似乎是不可能的

如果我在本地登录,我可以启动matlab-nodesktop-nodisplay-r脚本,matlab将启动一个精简的GUI并执行该命令

但是,这不可能通过ssh远程完成,因为matlab需要显示GUI

有人有什么建议或解决办法吗

谢谢


Bob

据报道,有两种未经记录的黑客可以解决类似的问题——它们不能保证解决您的特定问题,但值得一试。这两者都取决于:

  • 设置此选项修复了在远程Linux/Solaris计算机上启动Matlab时GUI速度极慢的问题

  • 此选项禁用Java实时编译器(JITC)。注意,它对Matlab解释器JITC没有影响。它的效果类似于使用“-nojvm”命令行选项运行Matlab。注意这一点。不幸的是,在某些情况下,别无选择。例如,在远程控制台上运行或运行时。在这种情况下,使用未记录的“-noawt”命令行选项是一个很好的选择,该选项启用JVM但阻止JavaGUI


  • 短篇故事:您的脚本正在调用exit()?你在用“-等等”吗

    长话短说:我认为如果你想与它互动,你根本就不走运,但如果你只是想批量处理工作,这应该行得通。Windows上的Matlab是一个GUI应用程序,而不是控制台应用程序,并且不会与仅字符的远程连接进行交互。但你仍然可以启动这个过程。Matlab将实际显示GUI——它将只是在远程计算机上的桌面会话中,您无法访问该会话。但是,如果你能让它在没有进一步投入的情况下完成你的工作,它就可以发挥作用,因为“工作”有一定的价值

    “-r脚本”开关的方向正确。但是要意识到,在Windows上,Matlab的“-r”行为是完成脚本,然后返回GUI,等待进一步的输入。您需要显式地包含一个“exit()”调用以完成作业,并添加try/catch以确保到达exit()。此外,您应该使用“-logfile”开关将所有命令窗口输出的副本捕获到日志文件中,这样您就可以看到它在做什么(因为您看不到GUI),并有以前运行的记录

    此外,默认情况下matlab.exe是异步的。除非添加“-wait”开关,否则ssh调用将启动Matlab并立即返回。检查您要使用的机器上的流程;Matlab实际上可能正在运行。添加-如果要阻止它直到完成,请等待

    一种方法是使用-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的假设在it中很普遍,很难解决。低级错误或许可证错误将弹出模式对话框并挂起作业。Matlab启动序列似乎有竞争条件。无法设置MATLAB.exe的退出状态。无法使用MatlabGUI调试作业抛出的错误。日志文件可能会被缓冲,在挂起和崩溃附近会丢失输出。等等

    <>认真考虑移植到Linux。Matlab更适合作为那里的批处理系统


    如果您有资金或备用许可证,还可以使用Matlab分布式计算工具箱和服务器在远程工作节点上运行代码。这可以用于并行化或远程批处理作业。

    使用putty使用ssh-X远程“matlab”它应该可以工作

    感谢您的回复,给了他们一个机会,不幸的是它们似乎不工作。这是matlab提供的GUI的屏幕截图,我当前的攻击计划是编写python脚本并在windows机器上本地运行它。脚本将监视要创建的文件的目录。当一个文件通过ssh远程提交到该目录时,本地python脚本将读取该文件并解析出matlab命令,并在本地、GUI和所有程序中启动该命令,但它至少是自动的。Bob-仔细阅读我的回复:您需要在java.opts文件中放置-D选项-它们不是命令行选项。今天也可以看到Mike在他的博客中的回应:当你尝试启动它时会发生什么?你是否有错误,或者它挂起了,或者其他什么?