Настройка crontab

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

andreyx
Сообщения: 3
ОС: Linux

Настройка crontab

Сообщение andreyx »

Уважаемые форумчане, возникла такая проблема - требуется организовать запуск задания из cron:

1. Каждую 45-ю минуту, т.е., в 0:45, 1:30, 2:15 и т.д.
2. Каждое 6-е воскресенье, т.е. один раз в 6 недель

Как такое можно реализовать, не создавая кучи заданий в crontab?
Спасибо сказали:
Аватара пользователя
oper777
Сообщения: 411
ОС: gentoo

Re: Настройка crontab

Сообщение oper777 »

(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

Re: Настройка crontab

Сообщение andreyx »

oper777 писал(а):
19.03.2010 10:04

Да я эти маны уже наизусть выучил, вот объясните мне, что будет означать запись:

*/45 * * * *

"Каждую 45-ю минуту, т.е. в 0:45, 1:30, 2:15 и т.д."
или
"каждую 45-ю минуту каждого часа, т.е. в 0:45, 1:45, 2:45 и т.д." ???
Спасибо сказали:
Аватара пользователя
oper777
Сообщения: 411
ОС: gentoo

Re: Настройка crontab

Сообщение oper777 »

andreyx писал(а):
19.03.2010 10:09
Да я эти маны уже наизусть выучил, вот объясните мне, что будет означать запись:

*/45 * * * *

будет выполнятся
"Каждую 45-ю минуту, т.е. в 0:45, 1:30, 2:15 и т.д."

Спасибо сказали:
Postum
Сообщения: 29
ОС: GNU Linux

Re: Настройка crontab

Сообщение Postum »

andreyx писал(а):
19.03.2010 10:09
"Каждую 45-ю минуту, т.е. в 0:45, 1:30, 2:15 и т.д."

потому что

andreyx писал(а):
19.03.2010 10:09
"каждую 45-ю минуту каждого часа, т.е. в 0:45, 1:45, 2:45 и т.д." ???

будет
45 */1 * * *
...И ты поймешь: все то, чего нельзя –
Песчинка в том, что не запрещено...
© Ю. Лорес
Спасибо сказали:
Аватара пользователя
oper777
Сообщения: 411
ОС: gentoo

Re: Настройка crontab

Сообщение oper777 »

Postum писал(а):
19.03.2010 10:23
andreyx писал(а):
19.03.2010 10:09
"каждую 45-ю минуту каждого часа, т.е. в 0:45, 1:45, 2:45 и т.д." ???

будет
45 */1 * * *


Проще

45 * * * *

:-D
Спасибо сказали:
Postum
Сообщения: 29
ОС: GNU Linux

Re: Настройка crontab

Сообщение Postum »

oper777 писал(а):
19.03.2010 10:32
Postum писал(а):
19.03.2010 10:23
andreyx писал(а):
19.03.2010 10:09
"каждую 45-ю минуту каждого часа, т.е. в 0:45, 1:45, 2:45 и т.д." ???

будет
45 */1 * * *


Проще

45 * * * *

:-D


Погорячился. С запасом - чтобы и

45 */N * * *

;-)
...И ты поймешь: все то, чего нельзя –
Песчинка в том, что не запрещено...
© Ю. Лорес
Спасибо сказали:
andreyx
Сообщения: 3
ОС: Linux

Re: Настройка crontab

Сообщение andreyx »

Postum писал(а):
19.03.2010 10:23
andreyx писал(а):
19.03.2010 10:09
"Каждую 45-ю минуту, т.е. в 0:45, 1:30, 2:15 и т.д."

потому что

andreyx писал(а):
19.03.2010 10:09
"каждую 45-ю минуту каждого часа, т.е. в 0:45, 1:45, 2:45 и т.д." ???

будет
45 */1 * * *

Методом научного тыка установлено, что запись
*/45 * * * *
запускает задание каждую 45-ю минуту КАЖДОГО часа, т.е. 0:45, 1:45, 2:45 плюс каждую 0-ю минуту, т.е. 00:0, 01:00, 02:00!!!
Видимо нет простого способа вызывать задание ЧЕРЕЗ КАЖДЫЕ 45 минут... Вот же блин!

Похоже, что в cron проверка условия реализована, как деление по модулю. Если делится без остатка, значит запускать, не делится - не запускать
Спасибо сказали:
Аватара пользователя
oper777
Сообщения: 411
ОС: gentoo

Re: Настройка crontab

Сообщение oper777 »

andreyx писал(а):
19.03.2010 10:40
Похоже, что в cron проверка условия реализована, как деление по модулю. Если делится без остатка, значит запускать, не делится - не запускать


Попробуйте fcron, вроде возможностей там больше
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Настройка crontab

Сообщение drBatty »

andreyx писал(а):
19.03.2010 10:40
1)Видимо нет простого способа вызывать задание ЧЕРЕЗ КАЖДЫЕ 45 минут... Вот же блин!

2)Похоже, что в cron проверка условия реализована, как деление по модулю. Если делится без остатка, значит запускать, не делится - не запускать

2) так и есть. */N нужно когда N маленькое, например */4.
1)есть. я делаю так

Код: Выделить всё

#!/bin/sh
while true; do
 sleep 43m
 ./task
done

такой скрипт запускает задачу каждые 43 минуты.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
lava
Сообщения: 155
ОС: archer

Re: Настройка crontab

Сообщение lava »

andreyx, к сожалению, да.

Как вариант, конкретно Ваш случай можно в две строки:
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
Спасибо сказали: