Redirection de sortie avec commande «écran»
-
13-11-2019 - |
Question
Peut-être un problème simple, mais j'exécute à distance la ligne de commande CentOS 5.4. Je veux rediriger la sortie d'un fichier Java simple, disons Loop pour imprimer cent mille numéros dans la console vers un fichier texte. Le truc, c'est que je ont Pour utiliser la commande 'écran' pour pouvoir l'exécuter en arrière-plan même si je perds ma session avec l'ordinateur distant et cette commande n'écrit pas dans le fichier souhaité.
J'ai essayé la méthode screen java MyClass >& log.txt
aussi screen java MyClass > log.txt
mais il n'écrit pas dans le fichier. Pourquoi cela se produit-il et y a-t-il une solution?
La solution
Vous pouvez le faire avec le nohup
commande. Voici un exemple.
$ 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
<< RELATION Shell >>
$ cat foo.txt
0
1
...
29
30
La raison pour laquelle cela ne fonctionne pas screen
est parce que screen
n'interpréte pas vos arguments comme le fait le shell. Si tu devais faire ça avec screen
, ça aurait fonctionné:
screen /bin/bash -c 'java Foo > foo.txt'
Autres conseils
samptample_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"