2010-06-08 107 views
7

我在48个虚拟机上运行matlab并希望自动运行它。我ssh进入机器,然后使用matlab -r matlab_command > outfile.txt &让进程在后台运行,并在注销时正常运行。唯一的问题是,当我jobs我的过程停止,并将不会启动,直到我fg^z bg。有没有matlab标志,以便我可以在不停止的情况下在后台运行它?在后台运行matlab

谢谢, 麦克

为了澄清,这是命令的,不工作

ssh server

matlab -r matlab_command > outfile.txt &

jobs

[1]停止

顺序

为了解决这个问题我

fg

^Z

bg

logout

,它现在在UNIX工作

+4

如果你这样做会发生什么:'matlab -r matlab_command> outfile.txt 2010-06-08 20:42:47

+0

谢谢,这正是我想要的 – msandbot 2010-06-09 15:35:46

回答

16

使用nohup命令,以防止MATLAB停止时你的标志UT。

nohup matlab -nodisplay -nosplash -r matlab_command > outfile.txt & 

并且不要忘记在matlab_command脚本的末尾包含exit;

UPDATE:

尝试这种解决方案:Is it possible to run MATLAB in the background under UNIX?

有一个解释here

+0

如果您想要显示器,NoMachine(http://www.nomachine.com/)非常好,因为它允许您重新登录到服务器。 – Jonas 2010-06-08 20:03:35

+0

当我注销时,Matlab不会停止,但它从来没有真正开始,直到它已经在前台运行至少一次 – msandbot 2010-06-08 20:17:26

9

您问题的真正干净解决方案是使用GNU Screen。 然后你不会松动你的Matlab会话,你总是可以回到Matlab提示符。如果有人出错你的Matlab代码,你需要调试一点,非常有帮助。

只需启动'screen'(安装完包后,包含在所有主要发行版中)。你将有一个典型的提示,但在一个持久的虚拟终端内。照常开始你的matlab,省略任何背景。然后按CTRL + A,D(第一个CTRL + A,然后d)。你将会失去屏幕。您可以注销。如果你想回到你的屏幕会话,运行screen -r。如果你愿意,你也可以直接开始screen matlab [...]。它会影响你的虚拟会话也会在matlab退出时被删除。

+1

我总是会忘记'screen'是多么有用! +1 – Amro 2010-06-08 21:59:24

+0

我不想做任何输入,比如这个ctrl和你所说的。我正在试图编写一个脚本来在144个不同的虚拟机上运行144个matlabs上的matlab。我不想手动开始每一个。 – msandbot 2010-06-09 03:30:20

+0

然后屏幕仍然适合你,因为你可以像nohup一样启动屏幕。你还可以做的是使用一个产生144个本地会话的屏幕[一个屏幕会话可以保存多个虚拟终端会话]。在每个会话中,你自动连接到一个虚拟机并运行matlab。然后,您不会注销,并可以通过一次屏幕会话轻松监视所有会话。并不是说你需要这样做,它只是用例的另一种选择。能够监控对我来说至关重要的声音 - 通过这样的会话数量,会有一些失败。 – ypnos 2010-06-09 14:01:38

1

我使用此解决方案,它在提供了一个虚拟的标准:

matlab -r matlab_command > outfile.txt < /dev/null & 
0

如果您使用的文件:

nohup matlab -nodesktop -nodisplay <file.m> result.txt &

您可能需要按在执行此操作后进入。

2

我在屏幕上遇到了麻烦:matlab开始了,但没有通过stdin传递过来的概念。它简单地忽略它。

但我成功了tmux。下面是我使用的命令行,

local$ ssh -f [email protected] 'tmux new-session -d -s matlab "matlab -nojvm -nodesktop -nodisplay -nosplash </path/to/myscript.m"' 

然后,您可以通过SSH进入远程主机(由前缀remote$这里所示),并通过发出remote$ tmux a -t matlab检查的事情。按Ctrl-b d即可分离出远程主机。您使用remote$ tmux ls列出会话(如屏幕)。你从Ctrl-b &内部和$remote tmux kill-session -t matlab外面杀死会话。

但我发现,你还可以将你的TMUX会话直接从本地主机:

local$ ssh -t [email protected] 'tmux a -t matlab' 

通知我不得不使用-t这里代替-f

0

我发现一些有用的链接Tips for Running Large Computationsnohup

nohup nice matlab -nodisplay -nosplash <matlab_command.m > outfile.txt > 2>dev/null & 

也许这可以解决您的问题。

+0

nohup nice matlab -nodisplay -nosplash outfile.txt 2>&1& – 2015-05-20 13:37:07