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/ |