2012-02-27 26 views
7

Może to być prosty problem, ale używam zdalnego wiersza polecenia CentOS 5.4. Chcę przekierować wyjście prostego pliku Java, powiedzmy pętli, aby wydrukować sto tysięcy liczb w konsoli do pliku tekstowego. Chodzi o to, że I ma, aby użyć polecenia "screen", aby móc uruchomić go w tle, nawet jeśli stracę sesję z komputerem zdalnym, a to polecenie nie zapisze w żądanym pliku.Przekierowanie wyjścia za pomocą polecenia "ekran"

Próbowałem metody screen java MyClass >& log.txt również screen java MyClass > log.txt, ale nie zapisuje do pliku. Dlaczego tak się dzieje i czy istnieje jakieś rozwiązanie?

Dzięki!

+2

Dlaczego nie używać 'nohup' zamiast? – mpontillo

+0

czy nadal będę w stanie uruchamiać inne polecenia, jeśli to zrobię? – javaCity

+2

to zależy od Ciebie. Jeśli uruchomisz go w tle, to tak. – mpontillo

Odpowiedz

15

Możesz to zrobić za pomocą polecenia nohup. Oto przykład.

$ 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 

< < odnowienie powłoki >>

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

Powód ten nie działa z screen dlatego screen nie interpretuje swoje argumenty jak powłoka robi. Jeśli było to zrobić z screen, by to działało:

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

dzięki. 'screen/bin/bash -c 'java Foo> foo.txt'' był dla mnie nowy! – 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" 
Powiązane problemy