shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Uptime de Serviços


From: Saulo Alves Martins
Subject: Re: [shell-script] Uptime de Serviços
Date: Fri, 12 Jul 2013 09:24:20 -0700 (PDT)

Caro Luiz Sales,

Segue uma solução para esse caso.

Veja que é uma solução prolixa e não elegante. Porém, é didática. Foi meu 
objetivo principal.

Coloquei os resultados obtidos para visualização de cada caso que o script 
trata.

Espero que te ajude.

Atenciosamente,
Saulo.


###### CÓDIGO #######

#!/bin/bash
>
>
># Se o nome não foi informado e o processo não está rodando no
># momento, sai do programa e informa ao usuário.
>
>
>if test -z "$1" # Primeiro é verificado se o nome do processo
>       # foi informado pelo usuário.
>then
>echo "
> 
>Processo nao informado !!!
>Favor informar o NOME do processo.
>Uso: $(basename"$0")<nome do processo>
>
>
> "
>exit 1# Se não foi informado nenhum argumento, sai do  programa instruindo
># o usuário a informar o nome do processo e a forma de uso do script.
>else
>programa=$(echo $1 | tr A-Z a-z)# Converte o nome do processo para minúsculo,
> # para evitar falso negativo.
>
>
>processo=$( ps h -o pid -C $programa ) 2> /dev/null  # Buscando o PID do 
>processo.
>
>
>if test -z $processo # Verificando se o PID foi encontrado.
>then
>echo ""
>        echo "o processo de nome \"$programa\"não está rodando ou não foi 
>encontrado !!!" ; echo ""
>echo "Verifique o nome informado." ; echo ""
>echo "!!! ATENÇÃO !!! Não informar o PID do processo !!!"
>        echo ""
>        exit 1  # Se o processo não está rodando no momento ou o nome foi 
># informado errado, sai do programa e informa ao usuário 
># sobre as possíveis causas.
>fi
>
>
>fi
>
>
># Constantes do Programa:
>
>
>um_dia="86400"# Quantidade em segundos correspondente a um dia (24 horas = 
>24x60x60 = 86.400 seg)
>uma_hora="3600"# Quantidade em segundos correspondente a uma hora (60 minutos 
>= 60x60 = 3.600 seg)
>um_minuto="60"# Quantidade em segundos correspondente a um minutoa (60 
>segundos = 1x60 = 60 seg)
>
>
>echo ""
>echo "----------------------------------------------------"
>
>
>tempo_total_processo=$(ps h -o etime -C $programa | head -n1)# Pega o tempo do 
>processo do processo nos seguintes formatos possíveis:
>#  a) DD-HH:MM:SS
>#  b) HH:MM:SS
>#  c) MM:SS
>
>
>echo "Tempo obtido: \"$tempo_total_processo\""# Imprime na tela o resultado, 
>para mostar
># a existência ou não de espaços.
>
>
># Retirando os "espaços" indesejados:
>
>
>tempo_total_processo=$(echo $tempo_total_processo)# Se houver espaços antes do 
>resultado, irá "remove-los"
>
>
>echo "Tempo padronizado: \"$tempo_total_processo\""# Para mostrar na tela o 
>resultado e comparar com o anterior.
>
>
># Se não houver os dias e horas colacaremos "0-00:".
># Padroniza o formato da saída de "MM:SS" para "DD-HH:MM:SS"
># A linha abaixo só tem efeito se a saída "casar" com a Expressão Regular.
># Assim não prejudica se já estiver no padrão desejado.
>
>
>tempo_total_processo=$(sed -E 
>"s/^[0-9][0-9]:[0-9][0-9]$/0-00:$tempo_total_processo/" <<< 
>$tempo_total_processo)
>
>
># Se não houver os dias colocaremos "0-".
># Padroniza o formato da saída de "HH:MM:SS" para "DD-HH:MM:SS"
># Mesmo conceito anterior, com outra ER e feito de uma forama diferente.
>
>
>tempo_total_processo=$(echo $tempo_total_processo| sed -E 
>"s/^[0-9][0-9]:[0-9][0-9]:[0-9][0-9]$/0-$tempo_total_processo/")
>
>
>echo "----------------------------------------------------"
>
>
>dias_processo=$(echo $tempo_total_processo | awk -F"-" '{print $1}') # Obtem 
>os dias do resultado padronizado obtido anteriormente.
>horas_processo=$(echo $tempo_total_processo | awk -F"-" '{print $2}' | awk 
>-F":" '{print $1}') # Obtem as horas ...
>min_processo=$(echo $tempo_total_processo | awk -F"-" '{print $2}' | awk -F":" 
>'{print $2}') # Obtem os minutos ...
>seg_processo=$(echo $tempo_total_processo | awk -F"-" '{print $2}' | awk -F":" 
>'{print $3}')# Obtem os segundo.
>
>
>echo " "
>echo "O tempo total do processo nº $processo(Programa $programa) é 
>$tempo_total_processo."
>echo " "
>echo "Traduzindo:" ; echo ""
>echo "Esse programa (processo nº $processo) está rodando há $dias_processo 
>dias, $horas_processohoras, $min_processominutos e $seg_processosegundos."
>echo " "
>
>
>segundos_totais=`echo 
>$(($um_dia*$dias_processo+$uma_hora*$horas_processo+$um_minuto*$min_processo+10#$seg_processo))`
> ;  # Cálculo dos segundos totais.
>
>
>echo 
>"##########################################################################"
>echo "#   #"
>echo " O tempo total desse processo é: $segundos_totaissegundos."
>echo "#   #"
>echo 
>"##########################################################################"
>echo " "


###### RESULTADOS ######

../Scripts_SHELL$ ./uptime-de-processo_vesao-2.0.sh firefox
>
>
>----------------------------------------------------
>Tempo obtido: "10-19:32:39"
>Tempo padronizado: "10-19:32:39"
>----------------------------------------------------
> 
>O tempo total do processo nº 31200 (Programa firefox) é 10-19:32:39 .
> 
>Traduzindo:
>
>
>Esse programa (processo nº 31200) está rodando há 10 dias, 19 horas, 32 
>minutos e 39 segundos.
> 
>##########################################################################
>#   #
> O tempo total desse processo é: 934359 segundos.
>#   #
>##########################################################################
>
>
>
>
>
>
> 
>../Scripts_SHELL$ ./uptime-de-processo_vesao-2.0.sh skype
>
>
>----------------------------------------------------
>Tempo obtido: "   15:20:20"
>Tempo padronizado: "15:20:20"
>----------------------------------------------------
> 
>O tempo total do processo nº  9356 (Programa skype) é 0-15:20:20 .
> 
>Traduzindo:
>
>
>Esse programa (processo nº  9356) está rodando há 0 dias, 15 horas, 20 minutos 
>e 20 segundos.
> 
>##########################################################################
>#   #
> O tempo total desse processo é: 55220 segundos.
>#   #
>##########################################################################
>
>
>
>
>
>
>
>
>../Scripts_SHELL$ killall skype
> 
>
>
>
>
>
>
>../Scripts_SHELL$ ./uptime-de-processo_vesao-2.0.sh skype
>
>
>o processo de nome "skype" não está rodando ou não foi encontrado !!!
>
>
>Verifique o nome informado.
>
>
>!!! ATENÇÃO !!! Não informar o PID do processo !!!
>
>
>
>
>
>
>../Scripts_SHELL$ skype
>
>
>
>
>
>
>../Scripts_SHELL$ ./uptime-de-processo_vesao-2.0.sh skype
>
>
>----------------------------------------------------
>Tempo obtido: "      00:03"
>Tempo padronizado: "00:03"
>----------------------------------------------------
> 
>O tempo total do processo nº 12662 (Programa skype) é 0-00:00:03 .
> 
>Traduzindo:
>
>
>Esse programa (processo nº 12662) está rodando há 0 dias, 00 horas, 00 minutos 
>e 03 segundos.
> 
>##########################################################################
>#   #
> O tempo total desse processo é: 3 segundos.
>#   #
>##########################################################################
>
>
>
>
>
>
>../Scripts_SHELL$ ./uptime-de-processo_vesao-2.0.sh skype
>
>
>----------------------------------------------------
>Tempo obtido: "      00:35"
>Tempo padronizado: "00:35"
>----------------------------------------------------
> 
>O tempo total do processo nº 12662 (Programa skype) é 0-00:00:35 .
> 
>Traduzindo:
>
>
>Esse programa (processo nº 12662) está rodando há 0 dias, 00 horas, 00 minutos 
>e 35 segundos.
> 
>##########################################################################
>#   #
> O tempo total desse processo é: 35 segundos.
>#   #
>##########################################################################
> 
>
>
>
>
>../Scripts_SHELL$ ./uptime-de-processo_vesao-2.0.sh skype
>
>
>----------------------------------------------------
>Tempo obtido: "      01:05"
>Tempo padronizado: "01:05"
>----------------------------------------------------
> 
>O tempo total do processo nº 12662 (Programa skype) é 0-00:01:05 .
> 
>Traduzindo:
>
>
>Esse programa (processo nº 12662) está rodando há 0 dias, 00 horas, 01 minutos 
>e 05 segundos.
> 
>##########################################################################
>#   #
> O tempo total desse processo é: 65 segundos.
>#   #
>##########################################################################
> 
>
>
>
>
>../Scripts_SHELL$ ./uptime-de-processo_vesao-2.0.sh skypeeee
>
>
>o processo de nome "skypeeee" não está rodando ou não foi encontrado !!!
>
>
>Verifique o nome informado.
>
>
>!!! ATENÇÃO !!! Não informar o PID do processo !!!
>
>
>
>
>
>
>
>
>../Scripts_SHELL$ ./uptime-de-processo_vesao-2.0.sh 12662
>
>
>o processo de nome "12662" não está rodando ou não foi encontrado !!!
>
>
>Verifique o nome informado.
>
>
>!!! ATENÇÃO !!! Não informar o PID do processo !!!
>
>
>../Scripts_SHELL$




________________________________
 De: Luiz Sales <address@hidden>
Para: address@hidden 
Enviadas: Terça-feira, 9 de Julho de 2013 15:18
Assunto: [shell-script] Uptime de Serviços
 


  
Amigos,
Estou trabalhando em uma soluçao para descobrir o uptime dos serviços...
eu estou buscando o resultado em segundos.

Segue o script que "estou" desenvolvendo..

#!/bin/sh -x
um_dia="86400"
uma_hora="3600"
um_minuto="60"

processo=$(ps h -C $1 | head -n1 | awk '{print $1}')
if [ -z $processo ];
then
echo "Processo nao encontrado!"
exit 1
else
# Pega a quantos dias o processo ta rodando.
day=$(ps -eo pid,etime | grep $processo | awk -F " " '{print $2}' |
awk -F "-" '{print $1}')
echo $day
if [ -z $day ];
then

day="0"
fi

# Calcular passado
# Hora
hour=$(ps -eo pid,etime | grep $processo | awk -F " " '{print $2}'
| awk -F "-" '{print $2}' | awk -F ":" '{print $1}')
echo $hour
minute=$(ps -eo pid,etime | grep $processo | awk -F " " '{print
$2}' | awk -F "-" '{print $2}' | awk -F ":" '{print $2}')
echo $minute
seconds=$(ps -eo pid,etime | grep $processo | awk -F " " '{print
$2}' | awk -F "-" '{print $2}' | awk -F ":" '{print $3}')
echo $seconds

dia_s=`echo $(($day*$um_dia))`
echo "Dia: $dia_s"
hora_s=`echo  $(($hour*$uma_hora))`
echo "Hora: $hora_s"
min_s=`echo $(($minute*$um_minuto))`
echo "Minuto: $min_s"

echo  "Uptime $1 em segundos: $(($dia_s+$hora_s+min_s+seconds))"
echo  $(($dia_s+$hora_s+min_s+seconds))

fi

com o comando
ps h -C <nome do serviço>   eu consigo pegar o pid e com o comando
ps -eo pid,time eu pego o tempo de execução, mas alguns serviços nao tem
dias(no ar) e eu acabo pegando outra variavel, acho que devido a posição de
cada atributo..  teria como delimitar o para o time ser sermpre em uma
coluna.. ou algo quen houvesse um padrao..

se o serviço tiver dia hora minuto segundo funciona corretamente, mas se
nao tiver dia, ele ja da erro no shell e eu perco as informações

-- 
Luiz Sales
aka redhate
Certified Zimbra, LPIC-2 e ITIL v2
Linux User #347508
aMSN: address@hidden
Licq: 251384040

[As partes desta mensagem que não continham texto foram removidas]


 

[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]