Linux (SOL) л oop до следующего дня - PullRequest
0 голосов
/ 10 апреля 2020

У меня проблема с l oop в ночном скрипте. Итак, я получил большой скрипт, который запускает ночной дамп для всех баз, а затем запускает некоторое количество задач, которые необходимо запустить на следующий день, потому что они сравнивают информацию в базах и вносят в нее некоторые изменения. Этот сценарий начинается в 00:35 и должен завершиться до 6:00 следующего дня. Но базы становятся все больше и больше, и только одна причина вовремя покончить с этим - начать сбрасывать базы раньше, чем сейчас. Поэтому я сделал несколько улучшений, которые я нашел в inte rnet и добавил в скрипт al oop, чтобы проверить, начался ли новый день:

while [ $(date "+%H") -ge 21 ]; do
    echo "`date` - NOT OK" >> /tfiles/Log/logtest.txt
    sleep 120
done
echo "`date` - OK" >> /tfiles/Log/logtest.txt

Вопрос в том, работает ли l oop , если базы сбрасываются достаточно долго, чтобы добраться до следующего дня. Я имею в виду - если мы запустим этот скрипт в 21:00, дамп завершится в 00:10, тогда l oop проверит, какой сегодня день, и начнет ждать до следующего дня.

И еще один вопрос, я не могу найти, что означает опция -ge 21?

В итоге скрипт выглядит так:

  1. начало в 21:00

  2. dump

  3. l oop проверьте, не достигнет ли он следующего дня

  4. дождитесь следующего дня

  5. заданий, которые необходимо запустить на следующий день

  6. конец скрипта, выполняющего что-то вроде

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Ваше состояние в то время как

while [ $(date "+%H") -ge 21 ]

Это говорит "l oop, пока [ (псевдоним для test) возвращает true". test использует -ge, чтобы проверить, является ли левый операнд ($(date "+%H")) большим или равным правого операнда (21).

date читает его аргумент, "+%H", в качестве спецификатора формата, определяющего вывод только в виде часа, в формате 24 часа, поэтому в 9 часов вечера он выдаст 21. Тест будет верным, поэтому он введет l oop, выведет в файл журнала и спит на две минуты. 22:00 - 22:00, 23:00 - 23, поэтому до полуночи должно работать нормально.

В полночь час становится 00, поэтому тест не пройден и l oop выпадает.

I Подумайте, что вы действительно хотите - это запись crontab, которая определяет требуемое поведение - c .f. руководство .

0 голосов
/ 10 апреля 2020

Я не совсем понимаю вопрос полностью, но, по крайней мере, эта часть:

-ge объясняется в человеке bash:

arg1 OP arg2 OP является одним из -eq, -ne, -lt, -le, -gt или -ge. Эти арифметические бинарные операторы c возвращают true, если arg1 равно, не равно, меньше, меньше или равно, больше или больше или равно arg2, соответственно. Arg1 и arg2 могут быть положительными или отрицательными целыми числами.

...