forum.bitel.ru
http://forum.bitel.ru/

Вопросец по шедуллеру
http://forum.bitel.ru/viewtopic.php?f=22&t=4014
Страница 1 из 1

Автор:  ok-2004 [ 13 май 2010, 00:04 ]
Заголовок сообщения:  Вопросец по шедуллеру

Встала задача запускать одну из задач один раз в конце месяца ( т.е. в последний день месяца в 23 часа 59 минут)
В стандартном юниксовом crone для достижения данной задачи в 23 часа 59 мин каждый день запускается скрипт, который манипулирует date и cal , определяя последний -ли это день месяца.
Так как написать сиё на jBGB-shell мне не по силам, раздумываю на запуске одной и той-же задачи три раза, вот с такими параметрами ( для 2010 года ):
Код:
1,3,5,7,8,10,12   *   31   23   59
2         *   28   23   59
4,6,9,11      *   30   23   59

Как то не очень красиво получается, может более простое решение лежит где-то на поверхности,подскажите пож-ста...

Автор:  skyb [ 13 май 2010, 10:51 ]
Заголовок сообщения:  Re: Вопросец по шедуллеру

так а можно же просто выставить число в шедулере и все и он будет только в это число срабатывать, а так же можно и время выставить

Автор:  ok-2004 [ 13 май 2010, 14:10 ]
Заголовок сообщения:  Re: Вопросец по шедуллеру

Я наверно плохо объяснил.
Как мне в шедуллере БЖБ изобразить аналогичные вещи ? :
Код:
59 23 * * *[ `date +%d` -eq `echo \`cal\` | awk '{print $NF}'` ] && myscript.sh


или

Код:
59 23 * * * [ `date -d tomorrow +%d` -eq '01' ] && myscript.sh


или

Код:
59 23 * * * [[ $(date +'%d') -eq $(cal | awk '!/^$/{ print $NF }' | tail -1) ]] && myscript.sh 1>/dev/null 2>&1


или
Код:
#!/bin/bash
#last-day-of-month.sh
TODAY=`/bin/date +%d`
TOMORROW=`/bin/date +%d -d "1 day"`
if [ $TOMORROW -lt $TODAY ]; then
        exit 0
fi
exit 1


(и в crontab:)

Код:
23 59 * * * last-day-of-month.sh && myscript.sh


???

Автор:  skn [ 13 май 2010, 15:19 ]
Заголовок сообщения:  Re: Вопросец по шедуллеру

никак, можете только сделать 3 записи с одной задачей
1) для меняцев в которых 30 дней
2) для месяцев в которых 31 день
3) и для февраля

Автор:  snark [ 13 май 2010, 21:33 ]
Заголовок сообщения:  Re: Вопросец по шедуллеру

а что за задача? а то ведь шедулер, ЕМНИМС, в 1-й час нового месяца обрабатывает предыдущий

Автор:  skyb [ 14 май 2010, 05:25 ]
Заголовок сообщения:  Re: Вопросец по шедуллеру

snark писал(а):
а что за задача? а то ведь шедулер, ЕМНИМС, в 1-й час нового месяца обрабатывает предыдущий

Так простите, у битела так же.
skn мне кажется вы ошибаетесь. Вы же сами писали
skn писал(а):
первого числа месяца, начисления абонплат в промежуток с 0 до 1 часа ночи, приводит к переобсчету абонплат за предыдущий месяц

Я так понял что так шедулер работает. Ели это только для абонплат? Или я вообще не чего не понимаю.

Автор:  snark [ 14 май 2010, 05:57 ]
Заголовок сообщения:  Re: Вопросец по шедуллеру

тут суть в чем - БГБ-шный шедулер - это, в общем виде, гуйный викси крон ... но! в зависимости от того какая задача выполняется - работать это будет разному, взять к примеру те же самые абон. платы ... поэтому я и спросил что за задачу Вы хотите реализовать? а то Вы думаете одно и шедулер в точное время запускает Вашу задачу, а произойдет другое ... хотя в общем виде (органичение викси крона так обычно и обходится) - тупо запускаете задачу каждый день в 23:59 и уже в скрипте смотрите:
Код:
dateToday = <дата запуска>;
dateTomorrow = <dateToday + 1 день>;

if (dateTomorrow == 1) { // т.е. это 1-й день месяца
    <выполняем задачу>;
}

и все будет:
а) работать как часы
б) Вам не надо будет делать как сказал ув. skn, т.е. создавать 2 записи для каждого месяца (30 и 31 день), да еще и 2 записи для февраля (28 и 29 числа) ну или проверять февральскую запись на високосность

Автор:  restart [ 20 май 2010, 16:03 ]
Заголовок сообщения:  Re: Вопросец по шедуллеру

snark писал(а):
Код:
dateToday = <дата запуска>;
dateTomorrow = <dateToday + 1 день>;

if (dateTomorrow == 1) { // т.е. это 1-й день месяца
    <выполняем задачу>;
}



Так лучше:
Код:
dateToday = new GregorianCalendar();
if( dateToday.getActualMaximum( Calendar.DATE ) != dateToday.get( Calendar.DATE ) )
    return; //если не последний день месяца, то уходим отсюда

<иначе выполняем задачу>;


Только вопрос по задаче остается открытым. Если нужно запустить (глобальный)скрипт, то это прокатит. Иначе придется вызов нужной задачи делать из скрипта.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/