Cron. Каждую вторую пятницу каждый месяц (cron)

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Cron. Каждую вторую пятницу каждый месяц

Сообщение nerve » 06.02.2015 17:04

можно было бы задать крон так:
каждую пятницу в 10-00 и далее проверять 2 или 4 это неделя. Если не вторая или не четвертая - то выходим.

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

0 10 * * 5 if [ "$((($(date +%d)-1)/7+1))" -ne "2" -o "$((($(date +%d)-1)/7+1))" -ne "4" ]; then exit 1;fi

но для месяца, начинающегося в субботу, это не работает, первая из вторых пятниц будет иметь 14 число

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

echo $((14/7+1))
3

Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15764
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Cron. Каждую вторую пятницу каждый месяц

Сообщение Bizdelnick » 06.02.2015 17:13

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

0 10 8-14,22-28 * 5 /bin/true
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Re: Cron. Каждую вторую пятницу каждый месяц

Сообщение nerve » 06.02.2015 17:31

то есть в кроне между День Недели и Число Месяца есть логическое И?
если совпала дата с нужным днем - переходим к выполнению, если нет - соответственно ничего.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15764
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Cron. Каждую вторую пятницу каждый месяц

Сообщение Bizdelnick » 06.02.2015 17:39

Нет, сейчас я заглянул в ман и понял, что ошибся. Между этими двумя полями как раз логическое или, в отличие от всех остальных. По крайней мере в vixie cron.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Re: Cron. Каждую вторую пятницу каждый месяц

Сообщение nerve » 06.02.2015 17:43

уже интересней:)
что же тогда придумать?
Спасибо сказали:

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

Re: Cron. Каждую вторую пятницу каждый месяц

Сообщение drBatty » 06.02.2015 18:49

nerve писал(а):
06.02.2015 17:04
каждую пятницу в 10-00 и далее проверять 2 или 4 это неделя. Если не вторая или не четвертая - то выходим.

немного непонятно, если 1ое число это среда, то это "нулевая неделя", или первая?

если "нулевая", то просто прибавьте к "дню месяца" "день недели первого числа месяца" и поделите сумму на семь. Получится "номер недели" начиная с №0.

ЗЫЖ

день недели date %u
день месяца date %d
и не нужно этих ваших -ne, в двойных скобках можно так и писать (( X+Y != 17 || Z+W == 23 ))
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15764
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Cron. Каждую вторую пятницу каждый месяц

Сообщение Bizdelnick » 06.02.2015 18:52

drBatty писал(а):
06.02.2015 18:49
в двойных скобках можно так и писать (( X+Y != 17 || Z+W == 23 ))

В bash можно.

Вообще проще в crontab прописать числа месяца, а день недели проверять в скрипте, а не наоборот.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

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

Re: Cron. Каждую вторую пятницу каждый месяц

Сообщение drBatty » 07.02.2015 10:47

Bizdelnick писал(а):
06.02.2015 18:52
Вообще проще в crontab прописать числа месяца, а день недели проверять в скрипте, а не наоборот.

я-бы в crontab вообще ничего не проверял, кроме времени суток. Запускал-бы каждый день скрипт.
Мне кажется, что писать скрипт в crontab == быдлокод. Это конечно ИМХО.

>В bash можно.
и это тоже. Запись в crontab типа

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

1 1 * * * $HOME/scripts/script.bash

проста и понятна. Какой-то скрипт на bash. И не нужно ломать голову о том, какой шелл будет этот скрипт выполнять, это в самом скрипте записано(+ намёк в имени скрипта).
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: