у меня действительно есть 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 ;
Какие-либо идеи?
Более изящный способ создать то задание крона был бы:
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. В противном случае имейте его выход.
Можно сделать сценарий, который называет другие сценарии организованным способом, как следующее, Это - Ваш 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
В вышеупомянутом сценарии переменные передаются через сценарии. Используйте с осторожностью и тест перед использованием кода.