решено: неясна работа cron (задание на первое воскресенте выполняется все первые числа)

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

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

Аватара пользователя
McSim
Сообщения: 419
Статус: Экспериментатор
ОС: заGNU/Linux Debian

решено: неясна работа cron

Сообщение McSim »

Доброго времени, форумчане.
Что-то какие-то привидения в сервере (или в голове :) )
В общем, необходимо мне запускать некий скрипт каждое первое восерсенье 1,4,8,10 месяца в 12 нуль-нуль. Для этого я создал задание следующего содержания:

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

# ежеквартальная архивация файловых баз на ARCHIV
00 12 1-7 1,4,8,10 sun /opt/myscript/quarterly-files

при этом, на неделе уже 3 раз запускается данное задание:
123 ~ # zgrep quarterly /var/log/syslog*
/var/log/syslog:Apr 6 12:00:01 files /USR/SBIN/CRON[7012]: (root) CMD (/opt/myscript/quarterly-files)
/var/log/syslog.1:Apr 5 12:00:01 files /USR/SBIN/CRON[29628]: (root) CMD (/opt/myscript/quarterly-files)
/var/log/syslog.2.gz:Apr 4 12:00:01 files /USR/SBIN/CRON[18650]: (root) CMD (/opt/myscript/quarterly-files)
/var/log/syslog.3.gz:Apr 3 12:00:01 files /USR/SBIN/CRON[4997]: (root) CMD (/opt/myscript/quarterly-files)
/var/log/syslog.4.gz:Apr 2 12:00:01 files /USR/SBIN/CRON[22410]: (root) CMD (/opt/myscript/quarterly-files)
/var/log/syslog.5.gz:Apr 1 12:00:01 files /USR/SBIN/CRON[16673]: (root) CMD (/opt/myscript/quarterly-files)

что-то я не понимаю, почему такое происходит :(
Подскажите, пжлст

P.S. Итого, для решения задачи "запуск cron в первое воскресенье/понедельлник/..../субботу месяца" найдено 2 пути (пока...) :
1. crontab:

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

0 2 * * sun [ `/bin/date '+\%e'` -qt 7 ] && /full/path/to/script
,где sun и 7 - воскресенье.
2. условие в скрипте и обычный cron:

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

# crontab -l
0 2 * * sun /full/path/to/script
# cat /full/path/to/script
#!/bin/bash
if [ `/bin/date +%e` -qt 7 ] ; then
   <my commands>
fi
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21520
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: решено: неясна работа cron

Сообщение Bizdelnick »

("man 5 crontab") писал(а):

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

       Note: The day of a command's execution can be specified in the  follow‐
       ing two fields — 'day of month', and 'day of week'.  If both fields are
       restricted (i.e., do not contain the "*" character), the  command  will
       be run when either field matches the current time.  For example,
       "30  4  1,15 * 5" would cause a command to be run at 4:30 am on the 1st
       and 15th of each month, plus every Friday.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
McSim
Сообщения: 419
Статус: Экспериментатор
ОС: заGNU/Linux Debian

Re: решено: неясна работа cron

Сообщение McSim »

Bizdelnick писал(а):
06.04.2012 17:31
("man 5 crontab") писал(а):

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

       Note: The day of a command's execution can be specified in the  follow‐
       ing two fields — 'day of month', and 'day of week'.  If both fields are
       restricted (i.e., do not contain the "*" character), the  command  will
       be run when either field matches the current time.  For example,
       "30  4  1,15 * 5" would cause a command to be run at 4:30 am on the 1st
       and 15th of each month, plus every Friday.


да, это печально :blush:
Блин, пошел писать одноразовые задания на пару лет вперед...

спасибо, Bizdelnick. Который раз дельные ответы направления даешь :)
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: решено: неясна работа cron

Сообщение sash-kan »

McSim
google://cron first sunday of the monthпервая ссылка

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

0 2 * * 0 [ `/bin/date '+\%e'` -le 7 ] && /full/path/to/script
(я лишь добавил полные пути к файлам и бэкслэш к проценту, чтоб исключить наступание на класс. грабли)
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
McSim
Сообщения: 419
Статус: Экспериментатор
ОС: заGNU/Linux Debian

Re: решено: неясна работа cron

Сообщение McSim »

sash-kan О великий и могучий нерусский язык :)
там же интересный пример:

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

# cat /opt/myscript/quarterly-files
#!/bin/bash
if [ `/bin/date +%e` -gt 7 ] ; then
   exit
else
   <my commands>
fi

А вот вопрос... про полные пути понятно, а вот бэкслеш и процент не очень...


можно увидить пример граблей?
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: решено: неясна работа cron

Сообщение KiWi »

Вообще, аналогичный крон есть в mdadm:

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

# By default, run at 00:57 on every Sunday, but do nothing unless the day of
# the month is less than or equal to 7. Thus, only run on the first Sunday of
# each month. crontab(5) sucks, unfortunately, in this regard; therefore this
# hack (see #380425).
57 0 * * 0 root [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ] && /usr/share/mdadm/checkarray --cron --all --quiet
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21520
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: решено: неясна работа cron

Сообщение Bizdelnick »

Собственно, и в мане есть близкий пример:

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

       # Run on every second Saturday of the month
       0 4 8-14 * *    test $(date +%u) -eq 6 && echo "2nd Saturday"
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: решено: неясна работа cron

Сообщение sash-kan »

McSim писал(а):
06.04.2012 23:30
а вот бэкслеш и процент

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

$ man -P 'grep -A 4 -B 3 "Percent-sign"' 5 crontab
       The  ``sixth'' field (the rest of the line) specifies the command to be
       run.  The entire command portion of the line, up  to  a  newline  or  %
       character, will be executed by /bin/sh or by the shell specified in the
       SHELL variable of the crontab file.  Percent-signs (%) in the  command,
       unless escaped with backslash (\), will be changed into newline charac‐
       ters, and all data after the first % will be sent  to  the  command  as
       standard  input.  There  is  no way to split a single command line onto
       multiple lines, like the shell's trailing "\".
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: решено: неясна работа cron

Сообщение drBatty »

не проще-ли обернуть команды в скрипт, и этот скрипт прописать в crontab, чем ломать голову, какой процент как воспринимается, и как оно сработает?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
McSim
Сообщения: 419
Статус: Экспериментатор
ОС: заGNU/Linux Debian

Re: решено: неясна работа cron

Сообщение McSim »

Всем еще раз спасибо. Решение - в шапке.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: решено: неясна работа cron

Сообщение sash-kan »

drBatty писал(а):
07.04.2012 13:40
не проще-ли обернуть команды в скрипт, и этот скрипт прописать в crontab, чем ломать голову, какой процент как воспринимается, и как оно сработает?
иногда лишняя сущность является более простым решением, иногда — нет·
иногда более простое решение является более удобным, иногда — нет·
иногда более удобное решение оказывается менее удобным при изменении обстоятельств, иногда — нет·

правильный выбор — это всегда наиболее сложная часть задачи·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: решено: неясна работа cron

Сообщение drBatty »

sash-kan писал(а):
07.04.2012 14:15
иногда лишняя сущность является более простым решением, иногда — нет·

угу. вот только является-ли скрипт в данном случае _лишней_ сущностью? Накрутить в кронтабе, в одностроке такую сложную команду ИМХО сложнее.
ИМХО в crontab'е должна быть записана _команда_, а не однострок на перле, и потому, отдельный скрипт тут лишним не является.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

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