крон запускает скрипт после другого

у меня действительно есть 3 сценария (A, B, C), что я хотел бы один за другим только если первый законченный. В данный момент, если концы A.sh, это переходит к B.sh, но если B.sh перестал работать, то это не выполнит C.sh никакие идеи о том, как зафиксировать это? я выполняю их через крон как:

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

Какие-либо идеи?

3
задан 8 June 2017 в 09:16

2 ответа

Более изящный способ создать то задание крона был бы:

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

Это заставит эти три задания работать последовательно. Вы могли сделать $HOME/scripts/A.sh, если Вам установили Ваши переменные соответственно.

Для основного управления заданиями, например, удостоверяясь, что сценарий 2 только работает, если сценарий 1 успешен, Вы могли бы добавить строку для exit=0 для записи временного файла такой как/tmp/script-1_success.

Затем в начале сценария 2, имейте его проверка, чтобы видеть, существует ли/tmp/script-1_success. В противном случае имейте его выход.

3
ответ дан 1 December 2019 в 15:22

Можно сделать сценарий, который называет другие сценарии организованным способом, как следующее, Это - Ваш cron файл,

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

Затем сценарий A-B-C.sh определяется как,

#!/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

Если Вы хотите к \, не хотят запускать скрипт B.sh и C.sh в случаях, где сценарий A.sh имеет некоторую ошибку, затем можно включать ошибочное отслеживание с помощью переменных, значение которых можно сохранить как 0 или 1. Затем в случае, если предыдущий сценарий не заканчивается как ожидалось, можно принять необходимое решение о том, что сделать со следующим сценарием. Пример следующий,

#!/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 

В вышеупомянутом сценарии переменные передаются через сценарии. Используйте с осторожностью и тест перед использованием кода.

3
ответ дан 1 December 2019 в 15:22

Другие вопросы по тегам:

Похожие вопросы: