Cron script bash automatizado para executar run 1 bash script then another, mais verificação de integridade

1

Portanto, tenho um aplicativo interno personalizado desenvolvido por terceiros. Quando o aplicativo está em execução, posso verificar se ele está sendo executado com o comando "screen -ls". Enquanto as telas estiverem sendo executadas para trilhos e freeswitch, sei que o aplicativo está funcionando corretamente.

Temos um script bash específico para interromper os serviços relacionados ao aplicativo e o segundo script para iniciar os serviços relacionados ao aplicativo.

Minha pergunta é como posso combinar esses dois scripts para reiniciar o aplicativo em um script que funciona da seguinte maneira:

  1. Executar script 1 - parar aplicativo
  2. Aguarde até o aplicativo ser encerrado (os processos de tela não estão mais sendo executados)
  3. Executar script 2 - iniciar aplicativo
  4. Espere até o aplicativo ser iniciado
  5. Verifique os soquetes "screen" para garantir que o processo de trilhos e freeswitch esteja em execução. Caso contrário, volte ao passo 1 e repita.

Agora, para reiniciar o aplicativo:

  1. Eu manualmente executo o script de parada via /tools/stop_app.sh
    • Isso, então, é enviado para o terminal para mostrar os serviços sendo encerrados.
    • Depois de concluído, ele me retorna de volta ao terminal.
  2. Agora eu manualmente executo o script de início via /tools/start_app.sh
    • Isso não produz nada, mas depois de concluído, retorna-me ao prompt do terminal.
  3. Eu, então, executo a tela -ls para verificar se todos os serviços do aplicativo estão sendo executados. (às vezes um serviço como o freeswitch não é iniciado).
  4. Se não, eu re-executei os scripts stop / start.

Pode ser perguntado por que não coloco tudo em um único script. Bem, este aplicativo personalizado é muito exigente e devido ao suporte limitado dos desenvolvedores, precisamos ter certeza de utilizar as ferramentas exatas que eles forneceram. Daí um script que chama os dois scripts separados fornecidos pelos desenvolvedores.

Por verificação de integridade refiro-me à verificação dos processos de "tela" para garantir que as telas ruby e freeswitch estejam sendo executadas. Para o cron, eu gostaria de executar este aplicativo reiniciar automaticamente em uma base semanal.

Note, quando eu digo bash script não tenho certeza se é correto dizer bash ou shell. Eu não tenho nenhuma preferência de script, desde que seja uma linguagem que geralmente vem instalada por padrão no Ubuntu Linux.

    
por Damainman 06.08.2013 / 06:10

1 resposta

1

Você deve ser capaz de fazer algo assim:

#/usr/bin/env bash

## We will use this function later to check if 
## everything has been correctly started.
function check_if_init_OK {
    ## You will need to edit this to add whatever services
    ## you have to check for.
    c=0; ## This is a counter, initialized to 0

    ## For each of the service names you are interested in.
    ## to add more, just put them after freeswitch, separated by a
    ## space they way they are now (e.g. a b c).
    for service in freeswitch foo bar baz; do

      ## Every time this loop is executed, $service will be
      ## one of the services you put in the list above. The
      ## script will run screen -ls and search for the name of the
      ## service. If it finds it, it will increment the counted $c by one.
      ## That is the meaning of '&&' in bash, x &&y means do y if x 
      ## was successful.
      screen -ls | grep $service >/dev/null 2>/dev/null && let c++; 
    done
    ## This just makes the function return $c which at this point
    ## will be how many of the the services you gave in the list have 
    ## been found.
    echo $c
}

## Run the first script -> stop app
script1.sh &

## Wait until it has stopped running
while screen -ls | grep script1.sh; do sleep 1; done 

## Run the second script -> start app and wait 15 seconds
script2.sh && sleep 15

## Check that everything has started OK. The function
## will return the number of services of interest that
## are up and running. While this is less than the number
## of services of interest, re-run script2.sh and check again.
## This loop will run the check_if_init_OK function until the 
## number returned (the number of running services of interest) is
## 3. You should change the 3 to reflect the actual number of services 
## you are looking for. So, as long as some services have not started,
## run script1.sh and then script2,sh and check if this time eveything
## has started OK. This loop will only exit when everything is working OK.
while [ "$(check_if_init_OK)" -ne 3 ];do
   script1.sh &&  script2.sh
done
    
por 06.08.2013 / 16:48