2012-02-27 66 views
7

Có thể là một vấn đề đơn giản, nhưng tôi đang chạy dòng lệnh CentOS 5.4 từ xa. Tôi muốn chuyển hướng đầu ra của một tệp Java đơn giản, cho phép lặp vòng lặp để in một trăm nghìn số trong bảng điều khiển thành một tệp văn bản. Vấn đề là, tôi để sử dụng lệnh 'màn hình' để có thể chạy trong nền ngay cả khi tôi mất phiên làm việc của mình với máy tính từ xa và lệnh này không ghi vào tệp mong muốn.Chuyển hướng đầu ra bằng lệnh "màn hình"

Tôi đã thử phương pháp screen java MyClass >& log.txt cũng screen java MyClass > log.txt nhưng không ghi vào tệp. Tại sao điều này xảy ra và có giải pháp nào không?

Cảm ơn!

+2

Tại sao không sử dụng 'nohup' để thay thế? – mpontillo

+0

tôi vẫn có thể chạy các lệnh khác nếu tôi làm điều đó? – javaCity

+2

tùy thuộc vào bạn. Nếu bạn chạy nó trong nền, sau đó có. – mpontillo

Trả lời

15

Bạn có thể thực hiện việc này bằng lệnh nohup. Đây là một ví dụ.

$ 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 

< < vỏ relaunch >>

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

Lý do này không làm việc với screen là vì screen không giải thích lý lẽ của bạn như vỏ không. Nếu bạn đã làm điều này với screen, nó sẽ làm việc:

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

cảm ơn. 'screen/bin/bash -c 'java Foo> foo.txt'' là mới đối với tôi! – 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" 
Các vấn đề liên quan