Перенаправление вывода с помощью команды screen

Может быть простая проблема, но я удаленно запускаю командную строку CentOS 5.4. Я хочу перенаправить вывод простого файла Java, скажем, цикла для печати ста тысяч чисел в консоли в текстовый файл. Дело в том, что я должен использовать команду 'screen', чтобы иметь возможность запускать ее в фоновом режиме, даже если я потеряю сеанс с удаленным компьютером, и эта команда не записывает в нужный файл.

Пробовал методом screen java MyClass >& log.txt и screen java MyClass > log.txt но в файл не пишет. Почему это происходит и есть ли решение?


person javaCity    schedule 27.02.2012    source источник
comment
смогу ли я по-прежнему запускать другие команды, если я это сделаю?   -  person javaCity    schedule 27.02.2012
comment
это зависит от вас. Если запускать в фоновом режиме, то да.   -  person mpontillo    schedule 27.02.2012
comment
Что происходит, когда вы запускаете screen, а затем запускаете «java MyClass › log.txt»?   -  person Barton Chittenden    schedule 27.02.2012


Ответы (2)


Вы можете сделать это с помощью команды 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 не интерпретирует ваши аргументы так, как это делает оболочка. Если бы вы сделали это с screen, это сработало бы:

screen /bin/bash -c 'java Foo > foo.txt'
person mpontillo    schedule 27.02.2012
comment
Благодарю. screen /bin/bash -c 'java Foo > foo.txt' был для меня новым! - person javaCity; 27.02.2012

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"
person Nikhil    schedule 14.01.2014