Je veux écrire la sortie d'une commande "top" spécifique dans un fichier. J'ai fait quelques recherches sur Google et j'ai découvert que cela peut être fait en utilisant la commande suivante.
top -n 10 -b > top-output.txt
où -n est pour spécifier le nombre d'itérations et -b est pour le mode batch. Cela fonctionne très bien si laissé en haut pour les 10 itérations. Mais si je romps l'exécution de la commande avec un Ctrl-C, le fichier de sortie semble être vide.
Je ne connais pas le nombre d'itérations à l'avance, j'ai donc besoin de le casser manuellement. Comment puis-je capturer la sortie de top dans un fichier sans spécifier d'itérations?
La commande que j'essaie d'utiliser précisément est
top -b | grep init > top-output.txt
et le casser quand je veux. Mais ça ne marche pas.
EDIT: Pour donner plus de contexte à la question, j'ai un Java Code qui invoque un outil avec un fichier d'entrée. Comme dans l'outil prend un fichier en entrée et s'exécute pendant un certain temps, puis prend le fichier suivant et ainsi de suite. J'ai un ensemble de 100 000 fichiers qui doivent être introduits dans l'outil. Alors maintenant, j'essaie de surveiller cet outil spécifique (il fonctionne comme un processus sous Linux). Je ne peux pas capturer l'ensemble de "top" les données sous forme de fichier car elles seraient trop volumineuses avec des données indésirables. Comment capturer les statistiques système de ce processus et les écrire dans un fichier en utilisant top?
pour moi top -b > test.txt
stockera toutes les sorties de top
ok même si je les casse avec ctrl-c
. Je vous suggère de vider d'abord, puis grep
le fichier résultant.
Que diriez-vous d'utiliser while
loop et -n 1
:
while sleep 3; do
top -b -n1 | grep init > top-output.txt
done
Il semble que la sortie n'écrive pas dans le fichier tant que toutes les itérations ne sont pas terminées. Vous pouvez résoudre ce problème en encapsulant avec une boucle externe comme celle-ci:
touch top-output.txt
while true; do
top -b | grep init >> top-output.txt
done
Voici le 1-liner que j'aime utiliser sur mon mac:
top -o -pid -l 1 | grep "some regexp"
À votre santé.
CTRL + C n'est pas une solution idéale en raison des séjours de contrôle dans CLI. Vous pouvez utiliser la commande ci-dessous qui sauvegarde la sortie supérieure dans un fichier:
top -n 1 -b > top-output.txt
Comme indiqué par @Thor dans un commentaire, il vous suffit de vous assurer que grep
ne met pas en mémoire tampon arbitrairement mais par ligne avec le --line-buffered
option:
top -bn 10 | grep 'init' --line-buffered | tee top-output.txt
Sans grep, la redirection de la sortie de top
vers un fichier fonctionne très bien, interruption incluse.
Si vous souhaitez exécuter la commande supérieure en arrière-plan (ne vous inquiétez pas de la déconnexion/veille, etc.) - vous pouvez utiliser Nohup ou un travail par lots ou cron ou écran.
Utilisation de Nohup (signifie: No Hang Up):
Supposons que vous enregistriez la commande supérieure dans un fichier appelé top-exec.sh avec le contenu suivant:
top -p <PID> -b > /tmp/top.log
Vous pouvez remplacer la commande top pour le processus qui vous intéresse. Ensuite, vous pouvez exécuter top-exec.sh en utilisant Nohup comme suit:
$> Nohup top-exec.sh &
Cela redirigera toutes les sorties de la commande top vers un fichier nommé "top.log".
J'ai eu exactement le même problème ...
voici ma ligne:
top -b -u myUser | grep -v Prog.sh | grep Prog > myFile.txt
Cela créerait myFile.txt mais il serait vide lorsque je le ferais Ctrl + C'd. Donc, après avoir lancé ma commande supérieure, j'ai commencé un deuxième processus supérieur. Lorsque j'ai trouvé le PID du premier sommet (a fait quelques essais et erreurs) et que je l'ai tué par le deuxième sommet, le premier sommet a écrit dans le fichier comme prévu.
J'espère que ça t'as aidé!
Résolu ce problème. Cela fonctionne même si vous appuyez sur Ctrl + c Même j'étais confronté au même problème lorsque je voulais enregistrer Cpu%. Exécutez ce script Shell:
#!/bin/sh
while true; do
echo "$(top -b -n 1 | grep init)" | tee -a top-output.log
sleep 1
done
man top
pour plus de détailsSource pour les explications de -b et -n: pages de manuel
man top
Kruthika