Existe-t-il un moyen pour que «top» s'exécute une seule fois et quitte?

13

Je trouve que la sortie de la commande shell topest un moyen simple et familier d'avoir une idée approximative de la santé d'une machine. Je voudrais servir topla sortie (ou quelque chose de très similaire) à partir d'un petit serveur Web sur une machine à des fins de surveillance brute.

Existe-t-il un moyen d'obtenir en haut d'écrire sa sortie textuelle exactement une fois , sans formater les caractères? J'ai essayé ça:

(sleep 1; echo 'q') | top > output.txt

Cela semble être proche de ce que je veux, sauf que (1) il n'y a aucune garantie que je n'obtiendrai pas plus ou moins d'un écran d'informations et (2) je dois supprimer tous les caractères de formatage du terminal.

Ou existe-t-il une autre topcommande similaire qui répertorie les informations sur la mémoire / l'utilisation du processeur / la disponibilité à l'échelle de la machine et au niveau du processus?

(Idéalement, j'adorerais une stratégie portable à la fois pour Linux et Mac OS X, car nos développeurs utilisent des Mac et notre environnement de production est Linux.)

Mickalot
la source

Réponses:

22

Sous Linux, vous pouvez essayer ceci:

top -bn1 > output.txt

De man top:

-b : Batch-mode operation
            Starts top in 'Batch' mode, which could be useful for sending
            output from top to other programs or  to  a  file.   In  this
            mode, top will not accept input and runs until the iterations
            limit you've set with the '-n' command-line option  or  until
            killed.
....
-n : Number-of-iterations limit as:  -n number
            Specifies  the  maximum  number of iterations, or frames, top
            should produce before ending.

Avec OS X, essayez:

top -l 1

Du haut de la page de manuel OSX :

 -l <samples>
              Use logging mode and display <samples> samples, even if 
              standard output is a terminal. 0 is treated  as  infinity.   
              Rather than redisplaying, output is periodically printed in 
              raw form. Note that the first sample displayed will have an 
              invalid %CPU displayed for each process,  as it is calculated 
              using the delta between samples.
cuonglm
la source
Cela ressemble exactement à la réponse que je chercherais si topsous OS X pris en charge l'indicateur -b. :-( Malheureusement, ce n'est pas le cas, et je ne vois pas de version topdisponible via homebrew. Cela semble être exactement la bonne réponse pour Linux, tho.
Mickalot
@Mickalot: Voir ma mise à jour. Pouvez-vous installer GNU top dans Mac OSX?
cuonglm
@Gnuoc: /usr/bin/top -l 1sur OSX 10.9.4 est parfait ... merci! Quant à l'installation de GNU top, je pourrais l'installer sur ma machine, mais je devrais convaincre les autres développeurs de l'installer sur leurs machines pour que mon code fonctionne pour eux, alors je préfère éviter cela. (Si ce n'est pas disponible via homebrew, il y aura de la résistance.) Maintenant que je changerai en fonction de la plate-forme, je vais être gourmand ... êtes-vous au courant de tout semi-équivalent de Windows, donc ces développeurs (nous avons quelques-uns) peut également avoir une page d'état brut? (Sinon, ça va, votre réponse est déjà super utile!)
Mickalot
@Mickalot: N'oubliez pas la note de la page de manuel supérieure OSX. Notez que le premier échantillon affiché aura un% CPU non valide affiché pour chaque processus, car il est calculé en utilisant le delta entre les échantillons. . Avec les utilisateurs de Windows, vous pouvez peut-être utiliser `` cygwin`
cuonglm
@Gnuoc Merci pour le point supplémentaire. Je suppose que je peux faire top -l 2et jeter la première page d'échantillons?
Mickalot
1

Pour obtenir des numéros de type similaires à partir d'un système Windows, vous voudrez jeter un œil à PowerShell.

Juste pour obtenir une liste des processus que vous regardez get-process. Jetez un oeil à cette référence .

En faisant quelques recherches supplémentaires, j'ai trouvé une jolie petite commande ici .

Si vous sortez de la boucle while présentée, vos besoins seraient:

ps | sort -desc cpu | select -first 30

psdans powershell est un alias pour get-process.

Yuppers
la source
Ça semble être une bonne idée! Je vais demander à un de mes collègues de Windows de l'essayer ...
Mickalot