2012-02-27 21 views
7

Podría ser un problema simple, pero estoy ejecutando la línea de comandos de CentOS 5.4 de forma remota. Quiero redirigir la salida de un archivo Java simple, digamos loop para imprimir cien mil números en la consola a un archivo de texto. Lo que pasa es que I tiene para usar el comando 'pantalla' para poder ejecutarlo en segundo plano incluso si pierdo mi sesión con la computadora remota y este comando no escribe en el archivo deseado.Redirección de salida con el comando "pantalla"

Probé el método screen java MyClass >& log.txt también screen java MyClass > log.txt pero no escribe en el archivo. ¿Por qué está pasando esto y hay alguna solución?

Gracias!

+2

Por qué no usar 'nohup' en su lugar? – mpontillo

+0

¿podría seguir ejecutando otros comandos si hago eso? – javaCity

+2

que depende de usted. Si lo ejecuta en segundo plano, entonces sí. – mpontillo

Respuesta

15

Puede hacerlo con el comando nohup. Aquí hay un ejemplo.

$ cat Foo.java 
public class Foo { 
    public static void main(String[] args) throws InterruptedException 
    { 
     for(int i = 0 ; i < 1000 ; i++) 
     { 
      System.out.println(i); 
      Thread.sleep(1000); 
     } 
    } 
} 

$ javac Foo.java 
$ nohup java Foo > foo.txt & 
[3] 29542 
$ cat foo.txt 
0 
1 
2 
3 
4 
5 
$ exit 

< < cáscara relanzamiento >>

$ cat foo.txt 
0 
1 
... 
29 
30 

La razón de que esto no funciona con screen se debe a screen no interpretan sus argumentos como la cáscara hace. Si se va a hacer esto con screen, habría trabajado:

screen /bin/bash -c 'java Foo > foo.txt' 
+4

gracias. 'screen/bin/bash -c 'java Foo> foo.txt'' era nuevo para mí! – javaCity

1

sample_script.sh

#!/bin/bash 
#start screen in detached mode with session name 'default_session' 
screen -dmS "default_session" 
#redirect output to abc.log 
screen -S default_session -X stuff "script -f /tmp/abc.log\n" 
#execute your command 
screen -S default_session -X stuff "your command goes here...\n" 
Cuestiones relacionadas