2010-06-08 2 views
7

Sto eseguendo matlab su 48 macchine virtuali e vorrei automatizzarlo. I ssh nelle macchine quindi utilizzare matlab -r matlab_command > outfile.txt & per eseguire il processo in background ed eseguire correttamente quando si disconnette. L'unico problema è che quando i jobs il mio processo viene interrotto e non si avvia fino a I fg^z bg. C'è una bandiera MATLAB in modo che io possa avviarla in background senza che si fermi?Esecuzione di matlab in background

Grazie, Mike

Per chiarire questo è l'ordine di comandi che non funzionano

ssh server

matlab -r matlab_command > outfile.txt &

jobs

[1] Arrestato

Per correggere questo ho

fg

^z

bg

logout

ed ora funziona comando

+4

Cosa succede se si esegue questa operazione: 'matlab -r matlab_command> outfile.txt

+0

Grazie, questo ha fatto esattamente quello che volevo – msandbot

risposta

16

Usa nohup su UNIX per evitare MATLAB fermarsi quando tu logo ut.

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

E non dimenticate di includere exit; alla fine dello script matlab_command.

UPDATE:

provare questa soluzione: Is it possible to run MATLAB in the background under UNIX?

C'è una spiegazione here.

+0

Nel caso tu voglia un display, NoMachine (http://www.nomachine.com/) è molto carino, dal momento che ti permette di accedere nuovamente al server. – Jonas

+0

Matlab non si ferma quando eseguo il logout, ma non si avvia mai fino a quando non è stato eseguito in primo piano almeno una volta – msandbot

9

La vera soluzione pulita per il tuo problema è utilizzare GNU Screen. Quindi non perderai la sessione di Matlab e potrai sempre tornare al prompt Matlab. Molto utile se qualcuno ha sbagliato con il tuo codice Matlab e hai bisogno di eseguire il debug un po '.

È sufficiente attivare "screen" (dopo aver installato il pacchetto, incluso in tutte le principali distribuzioni). Avrai un prompt tipico, ma all'interno di un terminale virtuale persistente. Inizia il tuo MATLAB come al solito, ometti qualsiasi sfondo. Quindi premere CTRL + A, D (prima CTRL + A, quindi d). Sarai fuori dallo schermo. Puoi uscire. Se si desidera tornare alla sessione dello schermo, eseguire screen -r. Se lo desideri, puoi anche avviare direttamente screen matlab [...] in primo luogo. Avrà l'effetto che anche la sessione virtuale venga interrotta quando Matlab si chiude.

+1

Ho sempre dimenticato quanto utile 'schermo' può essere! +1 – Amro

+0

Non voglio dover fare alcun input come questo ctrl a cui parli. Sto cercando di creare uno script per eseguire MATLAB su 144 MATLAB su 144 VM diverse. Non voglio dover iniziare ognuno a mano. – msandbot

+0

Quindi lo schermo è ancora adatto a te, dato che puoi avviarlo proprio come il caso nohup. Quello che puoi fare anche tu è usare uno schermo che genera 144 sessioni locali [una sessione di schermo può contenere diverse sessioni di terminali virtuali]. In ogni sessione, ti connetti automaticamente ad una VM ed esegui MATLAB. Quindi non si disconnette e si può facilmente monitorare tutte le sessioni passando attraverso la sessione di una schermata. Per non dire che è necessario farlo, è solo un'altra opzione per il tuo caso d'uso. Essere in grado di monitorare suoni vitali per me - con quel numero di sessioni ci saranno alcuni che falliscono. – ypnos

1

Sto usando questa soluzione, che fornisce uno standard fittizio in:

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

Se si utilizza il file:

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

Potrebbe essere necessario premere INVIO dopo aver eseguito questo.

2

Ho avuto problemi con lo schermo: il MATLAB ha iniziato ma non aveva idea di cosa fosse stato trasmesso attraverso lo stdin. Semplicemente lo ha ignorato.

Ma ci sono riuscito con tmux. Ecco la linea di comando che ho usato,

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

È quindi possibile ssh all'host remoto (qui indicato dal prefisso remote$) e controllare le cose mediante l'emissione di remote$ tmux a -t matlab. Ti disconnetti dal tuo host remoto premendo Ctrl-b d. Elencate le sessioni con remote$ tmux ls (come lo schermo). Uccidi la sessione dall'interno con Ctrl-b & e dall'esterno con $remote tmux kill-session -t matlab.

ma ho scoperto che si può anche collegare alla sessione tmux dal vostro host locale direttamente:

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

Avviso ho dovuto usare -t qui al posto di -f.

0

ho trovato qualche link utile Tips for Running Large Computations e nohup

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

Forse questo può risolvere il problema.

+0

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