Уважаемые форумчане, возникла такая проблема - требуется организовать запуск задания из cron:
1. Каждую 45-ю минуту, т.е., в 0:45, 1:30, 2:15 и т.д.
2. Каждое 6-е воскресенье, т.е. один раз в 6 недель
Как такое можно реализовать, не создавая кучи заданий в crontab?
Настройка crontab
Модераторы: SLEDopit, Модераторы разделов
-
oper777
- Сообщения: 411
- ОС: gentoo
Re: Настройка crontab
(man 5 crontab) писал(а):Step values can be used in conjunction with ranges. Following a range with ``/<number>'' specifies
skips of the number's value through the range. For example, ``0-23/2'' can be used in the hours
field to specify command execution every other hour (the alternative in the V7 standard is
``0,2,4,6,8,10,12,14,16,18,20,22''). Steps are also permitted after an asterisk, so if you want to
say ``every two hours'', just use ``*/2''.
-
andreyx
- Сообщения: 3
- ОС: Linux
-
oper777
- Сообщения: 411
- ОС: gentoo
-
Postum
- Сообщения: 29
- ОС: GNU Linux
Re: Настройка crontab
потому что
будет
45 */1 * * *
...И ты поймешь: все то, чего нельзя –
Песчинка в том, что не запрещено...
Песчинка в том, что не запрещено...
© Ю. Лорес
-
oper777
- Сообщения: 411
- ОС: gentoo
-
Postum
- Сообщения: 29
- ОС: GNU Linux
Re: Настройка crontab
Погорячился. С запасом - чтобы и
45 */N * * *
;-)
...И ты поймешь: все то, чего нельзя –
Песчинка в том, что не запрещено...
Песчинка в том, что не запрещено...
© Ю. Лорес
-
andreyx
- Сообщения: 3
- ОС: Linux
Re: Настройка crontab
Методом научного тыка установлено, что запись
*/45 * * * *
запускает задание каждую 45-ю минуту КАЖДОГО часа, т.е. 0:45, 1:45, 2:45 плюс каждую 0-ю минуту, т.е. 00:0, 01:00, 02:00!!!
Видимо нет простого способа вызывать задание ЧЕРЕЗ КАЖДЫЕ 45 минут... Вот же блин!
Похоже, что в cron проверка условия реализована, как деление по модулю. Если делится без остатка, значит запускать, не делится - не запускать
-
oper777
- Сообщения: 411
- ОС: gentoo
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Настройка crontab
2) так и есть. */N нужно когда N маленькое, например */4.
1)есть. я делаю так
Код: Выделить всё
#!/bin/sh
while true; do
sleep 43m
./task
doneтакой скрипт запускает задачу каждые 43 минуты.
-
lava
- Сообщения: 155
- ОС: archer
Re: Настройка crontab
andreyx, к сожалению, да.
Как вариант, конкретно Ваш случай можно в две строки:
45 */2 * * *
30 1-23/2 * * *
Похоже, что в cron проверка условия реализована, как деление по модулю. Если делится без остатка, значит запускать, не делится - не запускать
А вот это, согласно документации на крон, не совсем истина. После слэша указывается именно шаг. Именно поэтому должна работать вторая строчка. В ином случае, её записать вообще не было бы никакой возможности.
Со вторым вопросом сложнее из-за общей сложности соответствия недель месяцам. Как вариант, можно написать промежуточный скрипт, который будет запускаться каждое воскресенье, прибавлять единичку к переменной, а на 6-ой счёт запускать нужный скрипт и обнулять счётчик.
Как вариант, конкретно Ваш случай можно в две строки:
45 */2 * * *
30 1-23/2 * * *
Похоже, что в cron проверка условия реализована, как деление по модулю. Если делится без остатка, значит запускать, не делится - не запускать
А вот это, согласно документации на крон, не совсем истина. После слэша указывается именно шаг. Именно поэтому должна работать вторая строчка. В ином случае, её записать вообще не было бы никакой возможности.
Со вторым вопросом сложнее из-за общей сложности соответствия недель месяцам. Как вариант, можно написать промежуточный скрипт, который будет запускаться каждое воскресенье, прибавлять единичку к переменной, а на 6-ой счёт запускать нужный скрипт и обнулять счётчик.
Код: Выделить всё
#!/bin/sh
#
OPERATEON=6
ZERORUNS=1
ZERORUNS=$(($ZERORUNS + 1))
if [ "$ZERORUNS" -eq "$OPERATEON" ]
then
ZERORUNS=0
echo "Insert your script here" &
fi
sed -i "/^ZERORUNS=[0-9]*$/c\ZERORUNS=$ZERORUNS" $0