4 votes

top output to narrow in cron

J'essaie d'envoyer un email via cron pour savoir quels sont les processus qui encombrent mon serveur. Cela fonctionne bien mais l'email résultant est trop étroit et j'ai besoin d'en savoir plus sur le processus.

Voici le script que j'utilise (je l'ai volé ici) : http://www.inmotionhosting.com/support/website/server-usage/create-server-load-monitoring-bash-script ):

#!/bin/bash
trigger=10.00
load=`cat /proc/loadavg | awk '{print $1}'`
response=`echo | awk -v T=$trigger -v L=$load 'BEGIN{if ( L > T){ print "greater"}}'`

if [[ $response = "greater" ]]
then
top -cSbn 1 | head -14 | tail -8 | mail -s"High load on server - [ $load ]" myemail@domain.com
fi

L'e-mail qui en résulte ressemble à quelque chose comme :

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

 810809 root      20   0 20700  13m 3032 R   50  0.0   0:00.40 /prod/process-nam
 810802 root      20   0 20700  13m 3032 R   48  0.0   0:00.39 /prod/process-nam
 810808 root      20   0 20708  13m 3032 S   48  0.0   0:00.35 /prod/process-nam
 810803 root      20   0 20708  13m 3032 S   46  0.0   0:00.39 /prod/process-nam
 810810 root      20   0 20168  13m 3028 R   46  0.0   0:00.33 /prod/process-nam
 318723 www-data  20   0  146m 131m 3320 R   45  0.4  67:27.96 /home/server/pr
 810800 root      20   0 20704  13m 3032 S   45  0.0   0:00.39 /prod/process-nam

Comme vous pouvez le constater, il manque tout le chemin. Mais si je lance le script depuis bash, cela fonctionne, envoyant un email suffisamment large.

S'agit-il d'un problème lié à ncurses ? Un problème avec Pipe Mail ?

Merci de votre attention !

8voto

Sven Points 95985

Utiliser le -w commutateur pour top .

   -w  :Output-width-override as:  -w [ number ]
        In  'Batch'  mode,  when  used without an argument top
        will format output using the COLUMNS= and LINES= envi
        ronment  variables,  if set.  Otherwise, width will be
        fixed at the maximum 512 columns.  With  an  argument,
        output width can be decreased or increased (up to 512)
        but the number of rows is considered unlimited.

        In normal display mode, when used without an  argument
        top  will  attempt to format output using the COLUMNS=
        and LINES= environment variables,  if  set.   With  an
        argument,  output  width  can  only  be decreased, not
        increased.  Whether using environment variables or  an
        argument with -w, when not in 'Batch' mode actual ter
        minal dimensions can never be exceeded.

        Note: Without the use  of  this  command-line  option,
        output  width is always based on the terminal at which
        top was invoked whether or not in 'Batch' mode.

1voto

Lumi Points 101

Merci Sven, mais mon résultat pour Top est le suivant :

# top -w
top: unknown argument 'w'

Je suppose que vous avez une version plus récente. Mais vous m'avez envoyé dans la bonne direction (+1 pour vous) : J'ai modifié mon script pour exporter le nombre de colonnes et j'ai maintenant une sortie complète :

#!/bin/bash

trigger=15.00

load=`cat /proc/loadavg | awk '{print $1}'`

response=`echo | awk -v T=$trigger -v L=$load 'BEGIN{if ( L > T){ print "greater"}}'`

if [[ $response = "greater" ]]
then
#sar -q | mail -s"High load on server - [ $load ]" recipient@YourDomain.com
export COLUMNS=512
top -cSbn 1 | head -14 | tail -14 | mail -s"High load on server YODA - [ $load ]" quinhentos@queo.pt
fi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X