Pergunta

Pode ser um problema simples, mas estou executando a linha de comando do CentOS 5.4 remotamente.Quero redirecionar a saída de um arquivo Java simples, digamos, um loop para imprimir cem mil números no console para um arquivo de texto.A questão é que eu ter usar o comando 'screen' para poder executá-lo em segundo plano mesmo se eu perder minha sessão com o computador remoto e este comando não gravar no arquivo desejado.

Eu tentei o método screen java MyClass >& log.txt também screen java MyClass > log.txt mas não grava no arquivo.Por que isso está acontecendo e há alguma solução?

Foi útil?

Solução

Você pode fazer isso com o nohup comando.Aqui está um exemplo.

$ 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

<< reiniciar shell >>

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

A razão pela qual isso não funciona screen é porque screen não interpreta seus argumentos como o shell faz.Se você fizesse isso com screen, teria funcionado:

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

Outras dicas

amostra_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"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top