Запустить скрипт в определенный день без crontab - PullRequest
0 голосов
/ 24 октября 2018

У меня есть сценарий управления, который вызывает несколько внутренних сценариев.

`sh main_script.sh > main_script.log`

внутри main_script.sh

sh -x script_1.sh
sh -x script_2.sh
sh -x script_3.sh

Мне нужно запускать внутренние сценарии в определенные даты и управлять ошибкамисоответственно, если какой-либо из сценариев завершится неудачно, то при повторной попытке он должен запустить только этот конкретный вспомогательный сценарий.

script_1.sh - 25th of every month
script_2.sh - daily 
script_3.sh - Every quarterly month end

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Рядом с crontab также есть функция at, которая дает возможность запланировать задачу.Основное отличие состоит в том, что crontab для повторяющихся задач, а at для одиночного выполнения.

0 голосов
/ 24 октября 2018

Попробуйте:

current_day=$(date +%e)
current_time=$(date +"%H:%M")
current_month=$(date +"%m")

## Execute script_1.sh on 25th every month and at time = 10 AM
if [ $current_day == 25 ] && [ $current_time == '10:00' ]
then
   n=0
   until [ $n -ge 5 ]
   do
      sh -x script_1.sh && break  
      n=$[$n+1]
      sleep 15
 done
 fi
 ##This will keep retrying in every 15 seconds for 5 times and break out of loop if the command got successful    


## Execute script_2.sh daily at time = 10 AM
if [ $current_time == '10:00' ]
then
   sh -x script_2.sh
fi

## Execute script_3.sh for every quarter month-end(run for months Apr,Aug,Dec on 30th at 10 AM)

if [ $current_month == 4 ] || [ $current_month == 8 ] || [ $current_month == 12 ]
then 
  if [ $current_day == 30 ] && [ $current_time == '10:00' ]
    then
      sh -x script_3.sh
  fi
fi

Замените main_script.sh приведенным выше кодом.И продолжайте выполнять main_script.sh все время.

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...