¿Hay alguna manera de hacer que "top" se ejecute exactamente una vez y salga?


13

Considero que la salida del comando shell topes una forma simple y familiar de tener una idea aproximada de la salud de una máquina. Me gustaría servir topla salida (o algo muy similar) de un pequeño servidor web en una máquina para propósitos de monitoreo.

¿Hay alguna manera de llegar arriba para escribir su salida de texto exactamente una vez , sin formatear caracteres? He intentado esto:

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

Esto parece estar cerca de lo que quiero, excepto que (1) no hay garantía de que no obtendré más o menos una pantalla llena de información y (2) tengo que eliminar todos los caracteres de formato del terminal.

¿O hay algún otro topcomando similar que enumera tanto la memoria de la máquina como el nivel de proceso / uso de CPU / información de tiempo de actividad?

(Idealmente, me encantaría una estrategia que sea portátil tanto para Linux como para Mac OS X, ya que nuestros desarrolladores usan Macs y nuestro entorno de producción es Linux).

Respuestas:


22

En Linux, puedes probar esto:

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.

Con OS X, intente:

top -l 1

Desde la página principal de 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.

Esto parece exactamente la respuesta que estaría buscando si topen OS X soportara el indicador -b. :-( Lamentablemente, no lo hace, y no veo una versión topdisponible a través de homebrew. Esta parece ser la respuesta correcta para Linux, aunque.
Mickalot

@Mickalot: ver mi actualización. ¿Se puede instalar GNU top en Mac OSX?
Cuonglm

@Gnuoc: /usr/bin/top -l 1en OSX 10.9.4 es perfecto ... ¡gracias! En cuanto a la instalación de GNU top, podría instalarlo en mi máquina, pero tendría que convencer a los otros desarrolladores para que lo instalen en sus máquinas para que mi código funcione para ellos, así que prefiero evitarlo. (Si no está disponible a través de homebrew, habrá resistencia.) Ahora que voy a cambiar según la plataforma, voy a ser codicioso ... ¿conoces algún semi-equivalente de Windows, así que esos desarrolladores (tenemos algunos) también pueden tener una página de estado en bruto? (Si no, está bien, ¡tu respuesta ya es súper útil!)
Mickalot

@Mickalot: recuerde la nota de la página de manual superior de OSX. Tenga en cuenta que la primera muestra mostrada tendrá un% de CPU no válido para cada proceso, ya que se calcula utilizando el delta entre muestras. . Con los usuarios de Windows, tal vez pueda usar `` cygwin`
cuonglm

@Gnuoc Gracias por el punto extra. ¿Supongo que puedo hacer top -l 2y tirar la primera página de muestras?
Mickalot

1

Para obtener números de tipo similares de un sistema Windows, querrás echar un vistazo a powershell.

Solo para obtener una lista de procesos y mirar get-process. Echa un vistazo a esta referencia .

Al hacer algunas búsquedas más, encontré un pequeño comando agradable aquí .

Lo que si saca del bucle while presentado, para sus necesidades sería:

ps | sort -desc cpu | select -first 30

psen powershell es un alias para get-process.


¡Suena como una gran idea! Conseguiré que uno de mis compañeros de trabajo con Windows lo pruebe ...
Mickalot
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.