【问题标题】:Output redirection with "screen" command使用“screen”命令进行输出重定向
【发布时间】:2012-03-16 15:29:45
【问题描述】:

可能是一个简单的问题,但我正在远程运行 CentOS 5.4 命令行。我想重定向一个简单 Java 文件的输出,假设循环将控制台中的十万个数字打印到文本文件。问题是,我必须使用“screen”命令来在后台运行它,即使我失去了与远程计算机的会话并且该命令没有写入所需的文件。

我尝试了screen java MyClass >& log.txtscreen java MyClass > log.txt 的方法,但它没有写入文件。为什么会发生这种情况,有什么解决办法吗?

【问题讨论】:

  • 如果我这样做,我还能运行其他命令吗?
  • 这取决于你。如果你在后台运行它,那么是的。
  • 当你启动屏幕,然后运行 ​​'java MyClass > log.txt' 会发生什么?

标签: java linux redirect output gnu-screen


【解决方案1】:

您可以使用nohup 命令执行此操作。这是一个例子。

$ 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

>

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

这不适用于screen 的原因是screen 不会像shell 那样解释您的参数。如果您要使用 screen 执行此操作,它会起作用:

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

【讨论】:

  • 谢谢。 screen /bin/bash -c 'java Foo &gt; foo.txt' 对我来说是新的!
【解决方案2】:

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"

【讨论】:

    猜你喜欢
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多