Execução de script cíclico

2

Como fazer a execução cíclica do script? No final do script, preciso executá-lo novamente. Cron não é adequado, porque eu preciso executar o script imediatamente após o anterior

    
por Artem Y 03.05.2016 / 15:31

3 respostas

5

A estrutura básica de controle em qualquer tipo de linguagem de programação que requer looping indefinido é while loop.

while true ; do /path/to/script.sh ; if [ $? -ne 0    ] ; then continue ; else break ; fi ; done

Mais formatação legível seria:

while true 
do 
   /path/to/script.sh  # Ensure your script actually outputs exit status
   if [ $? -ne 0    ] ; then  
      continue  # if exit status not 0 ( not success ) , repeat
   else         
       break    # if successful - exit
   fi 
done

É claro que você precisa garantir que seu script realmente tenha um status de retorno igual a 0 no sucesso. Você pode ou não querer usar o caminho completo ou o operador ./ para executar o script no diretório atual ou especificar o interpretador como python /my/python/script.py

Se necessário, você pode adicionar um atraso antes do início da próxima iteração. Para fazer isso, você pode colocar sleep 0.250 logo após fi , mas antes de done

    
por Sergiy Kolodyazhnyy 03.05.2016 / 15:51
3

Execute-os como:

/path/to/script.sh && /path/to/script.sh

O segundo será executado se o primeiro for bem-sucedido.

Sem depender do sucesso do primeiro:

/path/to/script.sh; /path/to/script.sh

Execute o segundo somente se o primeiro falhar:

/path/to/script.sh || /path/to/script.sh

Para uma execução cíclica real, você pode usar uma função recursiva:

run_script () { /path/to/script.sh || run_script ;}
    
por heemayl 03.05.2016 / 15:36
1

Para que seu script seja executado novamente, você pode fazer assim (certifique-se de que o script tenha chmod 755 set):

#!/bin/bash
echo "test" #or whatever you do in your script
exec sh <scriptname>

Você pode parar seu script ctrl + c .

Observe que o uso de exec significa que haverá no máximo um processo sendo executado por vez, em vez de ter um novo processo adicionado toda vez que o script for executado.

    
por Videonauth 03.05.2016 / 15:47