ваш скрипт выглядит следующим образом в псевдокоде:
START
IF outside workinghours
EXIT
ELSE
RUN /Restore FOR EACH backupdir
GOTO START
Сценарий проверяет время только один раз, прежде чем запустить restore
прогон (который будет вызывать /Restore
для каждого каталога для восстановления вцикл for
) Он продолжит запуск цикла for
, пока не начнется рабочее время.Затем он выйдет.
Например, если вам нужно восстановить 3 папки для восстановления, каждая занимает 2 часа;и вы запускаете сценарий в полночь;затем скрипт проверит, не в нерабочее ли время (оно есть), и начнет восстановление для первой папки (на 0:00
), после двух часов работы он начнет восстановление 2-й папки (на 2:00
)еще через два часа начнется восстановление 3-й папки (на 4:00
).Как только третья папка будет восстановлена, она снова проверит рабочее время.Так как теперь это только 6:00
, то есть: вне рабочих часов, он начнет восстановление для первой папки (на 6:00
), после двух часов работы он начнет восстановление второй папки (на 8:00
).), еще через два часа начнется восстановление 3-й папки (на 10:00
).Это полдень, когда он делает следующую проверку рабочего времени;поскольку 12:00
находится в пределах 7:00
.. 17:00
, сценарий теперь остановится.С сообщением об ошибке.
Возможно, вы захотите, чтобы восстановление запускалось только один раз для каждой папки, и остановите переход к следующей папке, если начнется рабочее время.
#!/bin/bash
for path in /backup_local/ARCHIVES/EAR_*/; do
currenttime=$(date +%H:%M)
if [[ "$currenttime" > "7:00" ]] && [[ "$currenttime" < "17:00" ]]; then
echo "Not restoring inside working hours!" 1>&2
break
fi
dirname="$(basename "${path}")"
/Restore -a /backup_local/ARCHIVES -c -I 0 -force -v > /backup_local/$dirname.txt
# handle exit code
done
update
Я только что заметил ваше либеральное распространение &
для фоновой работы.Предположительно это позволяет запускать скрипт из удаленной оболочки. не
Что это действительно будет делать:
- он будет выполнять все итерации по каталогам восстановления параллельно.Это может создать узкое место в вашем хранилище (если каталоги для восстановления на / с совместно используют одно и то же оборудование)
- , это заменит весь цикл восстановления и немедленно вернется к проверке в нерабочее время.если проверка прошла успешно, она создаст другой цикл для восстановления (и фоновый режим).затем он вернется к проверке в нерабочее время и вызовет другой фоновый цикл для восстановления.До рассвета у вас, вероятно, есть несколько тысяч фоновых потоков для восстановления каталогов.Скорее всего, вы превысили свои ресурсы и процесс был убит.
В приведенном выше примере сценария пропущен весь фон (и nohup)
.
, если вы хотите запуститьскрипт из удаленной оболочки (и выход из оболочки после его запуска), просто запустите его с
nohup restore-script.sh &
В качестве альтернативы вы можете использовать
echo "restore-script.sh" | at now
или использовать cron-job (еслиприменимо)