cron запускает скрипт за другим

Я решил (или, скорее, обошел) это, не используя unionfs и вместо этого используя aufs - другую файловую систему union.

Установите пакет AUFS и его модуль ядра из linux -image-extra-virtual:

sudo apt-get install aufs-tools linux-image-extra-virtual

Соответствующая строка в моем fstab теперь выглядит так:

usr    /usr    aufs    udba=reval,br:/.filesystems/usr/rw:/.filesystems/usr/ro    0   0

squashfs установлен на /.filesystems/usr/ro в предыдущей строке, что сделало эту работу заменой тревожных шагов в другой файловой системе union .

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

4 ответа

Вы можете создать скрипт, который вызывает другие скрипты организованно, как показано ниже. Это ваш cron файл,

30 6,14 * * 1-5 / home / user / scripts /ABC.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

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

2
ответ дан 18 July 2018 в 11:59

Более элегантный способ создания этого задания cron будет:

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. Если нет, уходите.

1
ответ дан 18 July 2018 в 11:59

Вы можете создать скрипт, который вызывает другие скрипты организованно, как показано ниже. Это ваш cron файл,

30 6,14 * * 1-5 / home / user / scripts /ABC.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

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

2
ответ дан 24 July 2018 в 19:53
  • 1
    Я предположил, возможно, неправильно, что ОП хотел использовать три автономных сценария. В противном случае он мог бы написать один длинный скрипт. Кроме того, казалось, что существует желание запускать только последовательные сценарии, если предыдущий скрипт вышел из строя без сбоев. – jones0610 8 June 2017 в 09:38
  • 2
    Спасибо за замечание. Я так и думал, и я был в процессе написания. :-) – ankit7540 8 June 2017 в 10:25

Более элегантный способ создания этого задания cron будет:

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. Если нет, уходите.

1
ответ дан 24 July 2018 в 19:53
  • 1
    Спасибо за ответ. Я бы хотел, чтобы B.sh и C.sh выполнялись независимо от того, что если B или C не сработали. – john 8 June 2017 в 10:01
  • 2
    @john В этом случае создание задания cron, как я сказал в своем ответе, должно работать так, как вы хотите. – jones0610 8 June 2017 в 18:51

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

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