Осваиваю Форт... Борюсь со временем...

Обсуждение программ nnCron и nnCron LITE

Осваиваю Форт... Борюсь со временем...

Postby Baton72 » Thu, 07 Dec 2006, 10:48

Охох.. Я всегда знал, что время - наш враг... Но чтоб настолько... :?

Я прекрасно понял, как Крону объяснить, чтобы он запускал задачу, допустим, в первый понедельник месяца. В Cron-формате это делатеся так: m h 1-7 * 1 * 8)

Но тут всплыла другая ситуация... Задача запускается каждый день. Мне хочется, чтобы она сама выясняла, является ли сегодняшний день понедельником, и если является, то является ли этот понедельник первым понедельником месяца...
Дело в том, что на первый понедельник месяца помимо создания дампа планируется еще и стирание предыдущих дампов (это уже про nnBackup и к телу сильно не относится:)).

Я понял как Фортом сделать, чтобы Крон узнавал какая сегодня дата и даже день недели... Но как сделать, чтобы он выяснил, является ли понедельник первым днем месяца? :oops:

Объясните тупому, пожалуйста! :cry:
Baton72
 
Posts: 15
Joined: Wed, 29 Nov 2006, 14:40
Location: Тюмень

Postby Baton72 » Thu, 07 Dec 2006, 11:34

Ага... Кой-чего уже выяснил... Полученная информация позволяет уточнить вопрос:

как команде "DATE-INTERVAL: dd1.mm1.yyyy1-dd2.mm2.yyyy2" объяснить, что день должен быть от 1 до 7 чтобы быть TRUE?
То есть, что месяц и год значения не имеют.
Baton72
 
Posts: 15
Joined: Wed, 29 Nov 2006, 14:40
Location: Тюмень

Postby Lynx » Thu, 07 Dec 2006, 11:55

м... А как тебе такой вариант:
Code: Select all
Time: 0 10 1-7 * 1 *

:)
User avatar
Lynx
 
Posts: 321
Joined: Thu, 04 May 2006, 20:07
Location: Уфа

Postby Baton72 » Thu, 07 Dec 2006, 12:05

Нет, тут то всё понятно... m и h это я так, в общем написал. Типа minute и hour. :)
Вопрос стоит про расширенный режим...
Baton72
 
Posts: 15
Joined: Wed, 29 Nov 2006, 14:40
Location: Тюмень

Postby Lynx » Thu, 07 Dec 2006, 12:27

Для тех, кто все понял ;)
Time: 0 10 1-7 * 1 *
Т.е. в понедельник в промежуток между 1 и 7 числом (т.е. это первая неделя). :)
User avatar
Lynx
 
Posts: 321
Joined: Thu, 04 May 2006, 20:07
Location: Уфа

Postby Baton72 » Thu, 07 Dec 2006, 12:33

:?:

Я вот про что:

Если сегодня первый понедельник месяца, Крон запускает создание дампа 0 уровня.
А если НЕ первый понедельник месяца, то Крон запускает создание дампа 1 уровня.


Вот что я пытаюсь получить в общем и целом...
Baton72
 
Posts: 15
Joined: Wed, 29 Nov 2006, 14:40
Location: Тюмень

Postby Lynx » Thu, 07 Dec 2006, 12:41

Хм. Тогда создать две задачи - одна на 0, другая на 1 уровень? :) Право дело, проще :)
Т.е. первая:
Code: Select all
Time: 0 10 1-7 * 1 *
PURGE-OLD: ...
START-APP: "<дамп 0>"

Вторая:
Code: Select all
Time: 0 10 8-31 * 1 *
START-APP: "<дамп 1>"
User avatar
Lynx
 
Posts: 321
Joined: Thu, 04 May 2006, 20:07
Location: Уфа

Postby Baton72 » Thu, 07 Dec 2006, 12:54

Угу! Только у меня 20 компов, и если каждому делать по задаче (а помимо дампа 1 нужны еще дампы 3 и 5 уровня), то я... Гхм... как бы это сказать... Сдохну быстро! :lol:

Потому-то я и решил, что на каждую машину надо сделать задачу, которая сама будет выяснять, какой сегодня день недели и что ей надо делать... :oops:

Даж диаграмму составил... примерную... (50 Кб)
http://pics.livejournal.com/baton72/pic/0001f46y
Baton72
 
Posts: 15
Joined: Wed, 29 Nov 2006, 14:40
Location: Тюмень

Postby Lynx » Thu, 07 Dec 2006, 13:28

Ну условия "Дамп 0 уровня создан?" в принципе вроде делать не надо, ибо если он не создан, то дампом 3го уровня будет полный дамп :) (если я правильно понимаю).
Насчет остального:
Используй переменную %WD% для проверки дня :)
Как-нить так можно :)
Code: Select all
Time: 0 10 * * 3,5 *
START-APP: "nnbackup -d %%WD%%"

Т.е. в среду и пятницу будем делать дампы 3 и 5 ур.
Code: Select all
Time: 0 10 * * 1 *
DD S>NUM 7 <
IF
PURGE-OLD:
START-APP: "<дамп 0>"
ELSE
START-APP: "<дамп 1>"
THEN

Ну и оптимизировать немножко :)))
User avatar
Lynx
 
Posts: 321
Joined: Thu, 04 May 2006, 20:07
Location: Уфа

Postby Baton72 » Thu, 07 Dec 2006, 13:43

Ну условия "Дамп 0 уровня создан?" в принципе вроде делать не надо, ибо если он не создан, то дампом 3го уровня будет полный дамп


Будет-то будет, однако ж, если после 3 дампа запустится 5, то на следующей неделе в понедельник - тоже будет сделан полный дамп. А если у юзверя 20 гиг инфы? Это ж 20+20 получаица!
А если не будет 3 дампа, а сначала будет сделан 5? Тогда 60 гиг... Слишком много.

Поэтому в случае, если проверка дампа 0 вернет "False", должен быть обязательно сделан дамп 0 - а дальше всё пойдет своим чередом.

За %WD% спасибо... Натолкнуло на мыслю... Можно использовать %WW% и %WD%. Теперь осталось понять, как на Форте написать Например "Равно ли значение в стеке "Mo"?"... Код вида
Code: Select all
%WW%
Mo =
IF MSG: "Угу"
ELSE MSG: "Ни угу"
THEN

Не робит...

Lynx, быть может, ты знаешь, как им символом в форте определяется "Любое число", то есть как команду
Code: Select all
"DATE-INTERVAL: dd1.mm1.yyyy1-dd2.mm2.yyyy2"

написать, чтобы учитывалось только значение dd1 и dd2, а на всё остальное внимания не обращалось? Это бы сильно упростило задачку...
Baton72
 
Posts: 15
Joined: Wed, 29 Nov 2006, 14:40
Location: Тюмень

Postby Lynx » Thu, 07 Dec 2006, 13:54

А зачем проверять на "Mo"? Чем тебе не нравится?
Code: Select all
WD S>NUM 1 =

Ну или (из помощи ;)) раз так охота:
Code: Select all
WW S" Mo" COMPARE 0=
IF
...
THEN


Я DATE-INTERVAL: вообще никогда не пользовался, не вижу смысла :) Зачем ты именно его хочешь использовать?

Будет-то будет, однако ж, если после 3 дампа запустится 5, то на следующей неделе в понедельник - тоже будет сделан полный дамп.

В любом случае, тебе надо убить будет все дампы :) Ибо дамп 3 или 5 лева бесполезен без 0. Так что перед дампом 0 надо уничтожить все дампы :) И 3 тоже будет убит ;)
User avatar
Lynx
 
Posts: 321
Joined: Thu, 04 May 2006, 20:07
Location: Уфа

Postby Baton72 » Thu, 07 Dec 2006, 14:03

Потому что я ни понимаю как работает

Code: Select all
 WD S>NUM 1 =


Я уже вообще ничего не понимаю! :cry:
Блин...
Видимо все-таки придется признать что я тупой...

Вроде и хелпы читаю, и книжку эту скачал...
Всё равно ничего не пойму...

А в блок схеме написано, что в случае отсутствия дампа 0 все остальные должны быть убиты... Третий-то будет убит, но по расписанию дамп 0 нужно делать 1 раз в месяц. Соответственно 1 и 3 дампы (фактически - дубли), возможно, будут лежать долго, если не проверять наличия дампа 0...
Baton72
 
Posts: 15
Joined: Wed, 29 Nov 2006, 14:40
Location: Тюмень

Postby Baton72 » Thu, 07 Dec 2006, 15:03

Ааатлична! Научил его выяснять какой сегодня день... Однако ругается, что в стеке мусор... Как убрать?

Code: Select all
#( Test
NoActive
Action:
\ какой сегодня день?
 WW S" Mo" COMPARE 0=
 IF
 MSG: "Понедельник"
 ELSE
    WW S" We" COMPARE 0=
    IF
    MSG: "Среда"
    ELSE
       WW S" Fr" COMPARE 0=
       IF
       MSG: "Пятница"
       ELSE
MSG: "Никакой сегодня день!"
THEN
)#
Baton72
 
Posts: 15
Joined: Wed, 29 Nov 2006, 14:40
Location: Тюмень

Postby Baton72 » Thu, 07 Dec 2006, 15:11

Еще один вариант нарыл...
Code: Select all
    \ День равен чему?
    WD S>NUM
    \ выводим сообщение в зависимости от номера дня
    CASE
        \ День равен 1
        1 OF MSG: "Понедельник" ENDOF
        \ День равен 3
        3 OF MSG: "Среда" ENDOF
        \ День равен 5
        5 OF MSG: "Пятница" ENDOF
        \ любые остальные коды возврата
        DUP OF MSG: "Никакой сегодня день!" ENDOF
    ENDCASE


Этот не ругаица... Всё.. Ща пойду домой, и буду колупаца дома... Полдела сделано!
Lynx, спасибо за поддержку!
Baton72
 
Posts: 15
Joined: Wed, 29 Nov 2006, 14:40
Location: Тюмень

Postby Lynx » Thu, 07 Dec 2006, 15:33

В первом варианте ты IF .. ELSE не закрыл :) Должно быть IF .. ELSE .. THEN :) Это так, на всякий случай :)
Т.е.
Code: Select all
 WW S" Mo" COMPARE 0=
 IF
    MSG: "Понедельник"
 ELSE
    WW S" We" COMPARE 0=
    IF
       MSG: "Среда"
    ELSE
       WW S" Fr" COMPARE 0=
       IF
          MSG: "Пятница"
       ELSE
          MSG: "Никакой сегодня день!"
       THEN
    THEN
 THEN

)#
User avatar
Lynx
 
Posts: 321
Joined: Thu, 04 May 2006, 20:07
Location: Уфа

Next

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests

cron