2010-06-08 18 views
7

Używam programu Matlab na 48 maszynach wirtualnych i chcę go zautomatyzować. Wchodzę na maszyny i używam matlab -r matlab_command > outfile.txt &, aby proces był uruchamiany w tle i działa poprawnie po wylogowaniu. Jedynym problemem jest to, że mój proces jest zatrzymany i nie zostanie uruchomiony dopóki I fg^z bg. Czy jest tam flaga matlab, dzięki czemu mogę ją uruchomić w tle bez zatrzymywania?Uruchamianie programu Matlab w tle

Dzięki, Mike

Dla wyjaśnienia tego jest kolejność poleceń, które nie działają

ssh server

matlab -r matlab_command > outfile.txt &

jobs

[1] Zatrzymano

Aby rozwiązać ten I

fg

^oo

bg

logout

i działa teraz polecenie

+4

Co się stanie, jeśli to zrobisz: 'matlab -r matlab_command> outfile.txt

+0

Dziękuję, to zrobiło dokładnie to, co chciałem. – msandbot

Odpowiedz

16

Zastosowanie nohup na UNIX, aby zapobiec MATLAB zatrzymać kiedy twoje logo ut.

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

I nie zapomnij podać exit; na końcu skryptu matlab_command.

UPDATE:

Spróbuj tego rozwiązania: Is it possible to run MATLAB in the background under UNIX?

Jest wyjaśnienie here.

+0

Jeśli chcesz mieć wyświetlacz, NoMachine (http://www.nomachine.com/) jest bardzo miły, ponieważ pozwala ci zalogować się z powrotem na serwer. – Jonas

+0

Matlab nie zatrzymuje się po wylogowaniu, ale nigdy się nie uruchamia, dopóki nie zostanie uruchomiony na pierwszym planie co najmniej raz. – msandbot

9

Prawdziwym, czystym rozwiązaniem problemu jest użycie GNU Screen. Wtedy nie stracisz sesji Matlaba i zawsze możesz wrócić do monitu Matlaba. Bardzo pomocne, jeśli ktoś pomylił się z twoim kodem Matlaba i potrzebujesz trochę debugować.

Po prostu odpal "screen" (po zainstalowaniu pakietu, uwzględniony we wszystkich głównych dystrybucjach). Będziesz miał typowy monit, ale w stałym terminalu wirtualnym. Rozpocznij swój Matlab, jak zwykle, pomijając jakiekolwiek tło. Następnie naciśnij CTRL + A, D (pierwszy CTRL + A, a następnie d). Będziesz poza ekranem. Możesz się wylogować. Jeśli chcesz wrócić do sesji screen, uruchom screen -r. Jeśli chcesz, możesz także bezpośrednio uruchomić screen matlab [...]. Będzie to miało wpływ na to, że twoja sesja wirtualna zostanie również usunięta, gdy program Matlab zostanie zamknięty.

+1

Zawsze zapominam, jak użyteczny może być "ekran"! +1 – Amro

+0

Nie chcę wprowadzać żadnych danych, takich jak ten ctrl i d, o którym mówisz. Próbuję zrobić skrypt, aby uruchomić matlab na 144 matlabach na 144 różnych maszynach wirtualnych. Nie chcę rozpoczynać każdego ręcznie. – msandbot

+0

Następnie ekran jest odpowiedni dla Ciebie, ponieważ możesz go uruchomić tak samo, jak w przypadku Nohup. Możesz także użyć ekranu, które spawnuje 144 sesje lokalne [sesja screen może pomieścić kilka sesji terminalu wirtualnego]. W każdej sesji automatycznie łączysz się z jedną maszyną wirtualną i uruchamiasz matlab. Wtedy nie wylogowujesz się i możesz łatwo monitorować wszystkie sesje, przechodząc przez sesję jednego ekranu. Nie mówiąc, że musisz to zrobić, to tylko kolejna opcja dla twojego przypadku użycia. Możliwość monitorowania dźwięków jest dla mnie ważna - przy takiej liczbie sesji niektóre z nich zawiodą. – ypnos

1

Używam tego obejścia, która zapewnia obojętne standardu w:

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

Jeśli używasz plik:

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

Być może trzeba nacisnąć ENTER po wykonaniu tego.

2

Miałem problemy z ekranem: Matlab zaczął, ale nie miał pojęcia, co zostało przekazane przez stdin. Po prostu to zignorowało.

Ale udało mi się z tmux. Oto wiersz poleceń Kiedyś,

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

Następnie można ssh do zdalnego hosta (tu wskazany przez prefiks remote$) i sprawdzić rzeczy wydając remote$ tmux a -t matlab. Odłączasz się do zdalnego komputera, naciskając Ctrl-b d. Lista sesji zawiera remote$ tmux ls (np. Ekran). Zabić sesję od wewnątrz z Ctrl-b & iz zewnątrz z $remote tmux kill-session -t matlab.

Ale odkryłem, że można również dołączyć do sesji tmux z lokalnego hosta bezpośrednio:

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

Wskazówka musiałem użyć -t tutaj zamiast -f.

0

znalazłem kilka przydatnych odnośnik Tips for Running Large Computations i nohup

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

być może to rozwiązać problem.

+0

nohup nice matlab -nodisplay -nosplash outfile.txt 2> & 1 & –

Powiązane problemy