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

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

Re: Re[2]: [shell-script] Status dos servicos


From: Bruno Gunter Fricke
Subject: Re: Re[2]: [shell-script] Status dos servicos
Date: Mon, 14 May 2007 07:52:11 -0300

Dependendo da distribuição, não precisa desse monte de linhas não ;-)

Por exemplo, se for red hat, você pode criar vários scripts simples que checam 
o status do serviço com o "service status" e colocar na cron para verificar de 
30 em 30 segundos. Se der "pau", roda o "service restart".

Simples e funcional. Eu uso red hat e faço assim nas minhas máquinas. Creio que 
outras distros tenham comandos parecidos.

[]'s
Bruno Gunter

  ----- Original Message ----- 
  From: Viktor Mota 
  To: Edson Marquezani Filho 
  Sent: Sunday, May 13, 2007 11:28 PM
  Subject: Re[2]: [shell-script] Status dos servicos


  Olá Edson Marquezani Filho,

  Em sábado, 12 de maio de 2007, 18:55:55, você escreveu:

  Muito obrigado pela ajuda, seguindo os pensamentos, fiz o seguinte

  ----------------------------------------------------------
  #!/bin/bash
  # Script: religa.sh
  # Data: 13/05/07
  # Ultima modificacao: 13/05/07
  #
  # Objetivo:
  # Testar os daemons para ver se estao rodando, caso negativo liga-os!

  # Limpar a tela
  clear

  # Definindo variaveis
  #raiz=/etc/rc.d/init.d

  # Definando o laço para a variavel servicos (squid, syslogd, etc)
  for servicos in squid syslogd pppoe mysqld named httpd crond sshd qmaild
  do
  /sbin/pidof $servicos > /dev/null
  if [ $? -eq 0 ]
  then
  echo "Programa rodando" $servicos
  else
  tput bold
  echo "Programa não está rodando" $servicos
  echo "-----> Tentando levantar o serviço"
  tput sgr0
  service $servico start
  fi
  done

  #echo Pegando o IP do VELOX
  #IF0="ppp0"
  #IP_IS=`ifconfig $IF0 | grep inet | cut -d : -f 2 | cut -d \ -f 2`

  #echo O IP eh $IP_IS
  #IFO=""

  exit 0
  ----------------------------------------------------------

  Ainda nao consegui startar o servico de dentro do religa.sh, haja
  visto que no laco "for" os nomes informados nao necessariamente
  condizem com os arquivos no /etc/rc.d/init.d

  Exemplo:
  Parei propositalmente o MySql, so que nao consigo startar o bendito
  pois no "for" ele se chama "mysqld" e no /etc/rc.d/init.d/ chama-se
  apenas "mysql" sem o "D"!

  Aceito outras sugestões de todo o grupo, e sintam-se a vontade para
  melhorar e/ou criticar o script acima!

  >Eu sou bem fraquinho de bash-script, mas a primeira coisa que me vem
  >à cabeça é usar o comando pidof pra ver se o daemon em questão tá
  >rodando.

  >Tente, no shell:

  ># pidof programa > /dev/null && echo "Programa rodando" || echo
  >"Programa não está rodando"
  >
  >Se o processo existir vai jogar "Programa rodando" na tela ou
  >"Programa não está rodando" se não estiver.
  >O redirecionamento pra /dev/null é só pra não jogar o PID do programa na 
tela.
  >
  > Uma maneira melhor de você poder tratar a ação a ser executada de
  > acordo com o estado do programa, é usando a variável $?, que guarda o
  > código de retorno do último comando executado.
  > A grande maioria dos programas de Unix retornam 0 (zero) como código
  > de sucesso, e 1 em caso contrário.
  > 
  > Por exemplo, num script:
  > 
  > #!/bin/bash
  > 
  > pidof programa >> /dev/null
  > if [ $? -eq 0 ]; then
  > echo "Programa rodando"
  > else
  > echo "Programa não está rodando"
  > fi
  > 
  > Se quiser saber o PID do processo é só atribuir o comando a uma
  > variável, assim:
  > 
  > PID=`pidof programa`
  > 
  > A partir disso você pode escolher o que fazer quando um programa que
  > deveria estar rodando, não está e tal. Fica a seu gosto.
  > 
  > Inclusive se você for verificar vários deles, como citado, seria
  > mais inteligente fazer uma lista e ir varrendo com um laço FOR cada um
  > deles, e iniciando os que estivessem parados e tal, se essa for sua
  > intenção.

  -- 
  Sds,
  Viktor Mota
  address@hidden
  "Se um homem tiver realmente muita fé, pode dar-se ao luxo de ser cético." 
[Friedrich Nietzsche]



   

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



reply via email to

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