2010-06-08 106 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