Je dois enregistrer la sortie entière de screen
dans un fichier pour vérifier plus tard tout le contenu.
La raison est que je vide un port série de mémoire flash, en utilisant l’écran pour l’interface.
Je voudrais le sauvegarder dans un fichier pour vérifier la structure de la mémoire.
J'ai essayé :
$: screen /dev/ttyUSB0 115200 >> foo.txt
$: screen /dev/ttyUSB0 115200 | tee foo.txt
et j'ai aussi essayé d'utiliser le fichier tampon à partir de l'écran, mais je ne comprends pas comment l'utiliser.
Y a-t-il un moyen facile?
Il existe une option de ligne de commande pour la journalisation. La sortie est enregistrée dans le fichier screenlog.n, où n est le numéro de l'écran .
‘-L’ Indiquez à l’écran d’activer la journalisation automatique des sorties pour les fenêtres.
Vous pouvez également utiliser Control-a + H pour enregistrer les enregistrements dans le fichier screenlog.n . Un autre Control-a + H à désactiver.
C-a H: Commence/termine la journalisation de la fenêtre actuelle dans le fichier "screenlog.n".
La réponse sélectionnée ne fonctionne pas très bien avec plusieurs sessions et ne permet pas de spécifier un nom de fichier journal personnalisé.
Pour plusieurs sessions d'écran, voici ma formule:
1) créer un fichier de configuration pour chaque processus:
logfile test.log
logfile flush 1
log on
logtstamp after 1
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
logtstamp on
Si vous voulez le faire "à la volée", vous pouvez changer logfile
automatiquement .\012
signifie "nouvelle ligne", car utiliser \n
l'imprimera dans le fichier journal: source .
2) Lancez votre commande avec les drapeaux "-c" et "-L":
screen -c ./test.conf -dmSL 'Test' ./test.pl
C'est tout. Vous verrez "test.log" après le premier flush:
...
6 Something is happening...
[ test.pl: 2016-06-01 13:02:53 ]
7 Something else...
[ test.pl: 2016-06-01 13:02:54 ]
8 Nothing here
[ test.pl: 2016-06-01 13:02:55 ]
9 Something is happening...
[ test.pl: 2016-06-01 13:02:56 ]
10 Something else...
[ test.pl: 2016-06-01 13:02:57 ]
11 Nothing here
[ test.pl: 2016-06-01 13:02:58 ]
...
J'ai trouvé que "-L" est toujours requis même lorsque "log on" est sur le fichier de configuration.
Je n'ai pas pu trouver une liste des variables de format d'heure (comme% m) utilisées par screen. Si vous avez un lien de ces formats, postez-le ci-dessous.
** SUPPLÉMENTAIRE **
Si vous voulez le faire "à la volée", vous pouvez utiliser ce script:
#!/bin/bash
if [[ $2 == "" ]]; then
echo "Usage: $0 name command";
exit 1;
fi
name=$1
command=$2
path="/var/log";
config="logfile ${path}/${name}.log
logfile flush 1
log on
logtstamp after 1
logtstamp string \"[ %t: %Y-%m-%d %c:%s ]\012\"
logtstamp on";
echo "$config" > /tmp/log.conf
screen -c /tmp/log.conf -dmSL "$name" $command
rm /tmp/log.conf
Pour l'utiliser, enregistrez-le (screen.sh) et définissez les autorisations + x:
./screen.sh TEST ./test.pl
... et va exécuter ./test.pl et créer un fichier journal dans /var/log/TEST.log
pour terminal mac:
script -a -t 0 out.txt screen /dev/ttyUSB0 115200
détails
script
application intégrée pour "créer un TypeScript de session de terminal"-a
ajouter au fichier de sortie-t 0
le temps entre l'écriture dans le fichier de sortie est de 0 secondes, donc out.txt est mis à jour pour chaque nouveau caractèreout.txt
est juste le nom du fichier de sortiescreen /dev/ttyUSB0 115200
- commande de la question pour la connexion à un périphérique externevous pouvez ensuite utiliser tail pour voir que le fichier est mis à jour
tail -100 out.txt
La commande suivante fonctionne pour la version d'écran 4.06.02
screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed
Depuis la page de manuel de l'écran:
-Logfile file : By default logfile name is "screenlog.0".
You can set new logfile name with the "-Logfile" option.
Vous pouvez vérifier la version existante de screen à l'aide de screen -version. Vous pouvez télécharger et installer la dernière version de screen à partir de https://www.gnu.org/software/screen/ .
Ctrl+A puis Shift+H travaille pour moi. Vous pouvez afficher le fichier screenlog.0
pendant l'exécution du programme.
La commande "script" sous Unix devrait faire l'affaire. Lancez-le au début de votre nouvelle console et vous devriez être bon.
Ce qui suit pourrait être utile (testé sur: Linux/Ubuntu 12.04):
cat /dev/ttyUSB0
En utilisant ce qui précède, vous pouvez alors effectuer toutes les réorientations dont vous avez besoin. Par exemple, pour vider la sortie sur votre console lors de l’enregistrement dans votre fichier, vous devez:
cat /dev/ttyUSB0 | tee console.log
Voici une astuce: enveloppez-le dans sh -c
!
screen sh -c './some-script 2>&1 | tee mylog.log'
Où 2>&1
redirige stderr vers stdout afin que tee
puisse intercepter et consigner les messages d'erreur.