cron executa um script após o outro

3

Eu tenho 3 scripts (A, B, C) que eu gostaria de um após o outro somente se o primeiro terminar. No momento, se o A.sh terminar, ele irá para B.sh, mas se o B.sh falhar, ele não executará o C.sh Alguma idéia de como consertar isso, por favor? Eu estou correndo eles através do cron como:

30 6,14 * * 1-5/home/user/scripts/A.sh ; /home/user/scripts/B.sh ; /home/user/scripts/C.sh ; 

Alguma idéia, por favor?

    
por john 08.06.2017 / 08:15

2 respostas

2

Você pode criar um script que chame outros scripts de maneira organizada, como seguir Este é o seu arquivo cron ,

30 6,14 * * 1-5 / home / usuário / scripts / A-B-C.sh

Em seguida, o script A-B-C.sh é definido como

#!/bin/bash
# Run script A,B,C

# execute script A
./home/user/scripts/A.sh

#execute script B
./home/user/scripts/B.sh

enter code here
#execute script C
./home/user/scripts/C.sh

Se você quiser \ não deseja executar o script B.sh e C.sh nos casos em que o script A.sh tiver algum erro, você poderá incluir o rastreamento de erros usando variáveis cujo valor você pode manter como 0 ou 1 . Então, caso o script anterior não termine como esperado, você pode tomar a decisão necessária sobre o que fazer com o próximo script. Um exemplo é o seguinte,

#!/bin/bash
# Run script A,B,C

# Exit code and default run code initialization
exit_A=0
exit_B=0

def_B=1
def_C=1
#----------------------------------------------


# execute script A
. ./home/user/scripts/A.sh $exit_A #make sure to change the value of exit_A to 1 if A finishes as expected.

if [$exit_A==1] && [def_B==1] #only if A finishes without error and B is ok
then
#execute script B
. ./home/user/scripts/B.sh $exit_B
else
<do something like log>
fi

if [$exit_B==1] && [def_C==1] #only if B finishes without error and C is ok
then
#execute script C
. ./home/user/scripts/C.sh $exit_C
else
<do something like log>
fi

now="$(date +'%d/%m/%Y-%T')"
#make a log in a file (print can be used for better formatting)
echo -e $now,$exit_A,$exit_B,$exit_C >>  /home/user/log/script_log.txt 

No script acima, as variáveis estão sendo passadas pelos scripts. Use com cautela e teste antes de usar o código.

    
por ankit7540 08.06.2017 / 08:33
1

Uma maneira mais elegante de criar esse trabalho cron seria:

30 6,14 * * 1-5 /home/user/scripts/A.sh && /home/user/scripts/B.sh && /home/user/scripts/C.sh

Isso fará com que os três trabalhos sejam executados consecutivamente. Você pode fazer $HOME/scripts/A.sh se tiver suas variáveis definidas adequadamente.

Para controle básico do trabalho, por exemplo garantindo que o script-2 seja executado apenas se o script-1 for bem-sucedido, você poderá adicionar uma linha para exit = 0 para gravar um arquivo temporário, como / tmp / script-1_success.

Então, no início do script-2, verifique se / tmp / script-1_success existe. Se não, saia.

    
por jones0610 08.06.2017 / 08:34