2010-06-08 9 views
7

Estoy ejecutando matlab en 48 máquinas virtuales y me gustaría automatizarlo. Entro en las máquinas y luego uso matlab -r matlab_command > outfile.txt & para que el proceso se ejecute en segundo plano y funcione bien cuando termino la sesión. El único problema es que cuando yo jobs mi proceso se detiene y no se inicia hasta I fg^z bg. ¿Hay una bandera de matlab para que pueda ejecutarla en segundo plano sin que se detenga?Ejecutando matlab en el fondo

Gracias, Mike

Para aclarar este es el orden de los comandos que no funcionan

ssh server

matlab -r matlab_command > outfile.txt &

jobs

[1] Detenido

Para solucionar este me

fg

^z

bg

logout

y ahora funciona el comando

+4

¿Qué ocurre si haces esto: 'matlab -r matlab_command> outfile.txt

+0

Gracias, esto hizo exactamente lo que yo quería – msandbot

Respuesta

16

Uso nohup en UNIX para evitar MATLAB parar cuando tu logo Utah.

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

Y no se olvide de incluir exit; al final de la escritura matlab_command.

ACTUALIZACIÓN:

Pruebe esta solución: Is it possible to run MATLAB in the background under UNIX?

Hay una explicación here.

+0

En caso de que desee una pantalla, NoMachine (http://www.nomachine.com/) es muy agradable, ya que le permite volver a iniciar sesión en el servidor. – Jonas

+0

Matlab no se detiene cuando cierro la sesión, pero en realidad nunca comienza hasta que se ha ejecutado en primer plano al menos una vez – msandbot

9

La verdadera solución limpia a su problema es usar GNU Screen. Entonces no perderá su sesión de Matlab y siempre podrá regresar al aviso de Matlab. Muy útil si alguien salió mal con su código Matlab y necesita depurar un poco.

Simplemente inicie 'screen' (después de que tenga el paquete instalado, incluido en todas las distribuciones principales). Tendrás un mensaje típico, pero dentro de un terminal virtual persistente. Comience su matlab como de costumbre, omita cualquier fondo. Luego presione CTRL + A, D (primero CTRL + A, luego d). Estarás fuera de la pantalla. Puedes desconectarte Si desea volver a su sesión de pantalla, ejecute screen -r. Si lo desea, también puede comenzar directamente screen matlab [...] en primer lugar. Tendrá el efecto de que su sesión virtual también se elimine cuando se cierre matlab.

+1

¡Siempre me olvido de lo útil que puede ser 'screen'! +1 – Amro

+0

No quiero tener que hacer ningún comentario como este ctrl a d de lo que hablas. Estoy tratando de crear un script para ejecutar matlab en 144 matlabs en 144 máquinas virtuales diferentes. No quiero tener que comenzar cada uno a mano. – msandbot

+0

Entonces la pantalla sigue siendo adecuada para usted, ya que puede iniciarla como en el caso nohup. Lo que también puede hacer es usar una pantalla que genere 144 sesiones locales [una sesión de pantalla puede albergar varias sesiones de terminal virtual]. En cada sesión, se conecta automáticamente a una máquina virtual y ejecuta matlab. Entonces no cierra la sesión y puede controlar fácilmente todas las sesiones pasando por su sesión de una pantalla. No quiere decir que deba hacer eso, es solo otra opción para su caso de uso. Ser capaz de monitorear sonidos que son vitales para mí - con ese número de sesiones habrá algunos que fallen. – ypnos

1

estoy usando esta solución, que proporciona un estándar maniquí en:

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

Si está utilizando archivo:

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

Es posible que necesite pulsar la tecla Intro después de ejecutar este.

2

Tuve problemas con la pantalla: se inició matlab pero no tenía idea de lo que se había pasado a través de stdin. Simplemente lo ignoró.

Pero lo logré con tmux. Aquí está la línea de comandos que usé,

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

A continuación, puede ssh en el host remoto (indicado aquí por el prefijo remote$) y comprobar las cosas mediante la emisión de remote$ tmux a -t matlab. Se desconecta a su host remoto presionando Ctrl-b d. Lista sesiones con remote$ tmux ls (como pantalla). Matas la sesión desde adentro con Ctrl-b & y desde afuera con $remote tmux kill-session -t matlab.

Pero he descubierto que también se puede conectar a la sesión tmux de su host local directamente:

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

Aviso tuve que usar -t aquí en lugar de -f.

0

he encontrado algunos vínculo útil Tips for Running Large Computations y nohup

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

tal vez esto se puede arreglar el problema.

+0

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

Cuestiones relacionadas