Перенаправление вывода с помощью команды «экран»
-
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
не интерпретирует ваши аргументы, как это делает оболочка.Если бы вы сделали это с screen
, это сработало бы:
screen /bin/bash -c 'java Foo > foo.txt'
Другие советы
thumb_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"
.