使用“screen”命令进行输出重定向
-
13-11-2019 - |
题
可能是一个简单的问题,但我正在远程运行 CentOS 5.4 命令行。我想重定向一个简单 Java 文件的输出,假设循环将控制台中的十万个数字打印到文本文件中。问题是,我 有 使用“屏幕”命令能够在后台运行它,即使我失去了与远程计算机的会话并且该命令不会写入所需的文件。
我尝试了方法 screen java MyClass >& log.txt
还 screen java MyClass > log.txt
但它不会写入文件。为什么会出现这种情况,有什么解决办法吗?
解决方案
您可以使用 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'
其他提示
样本脚本.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"
不隶属于 StackOverflow