Автор Тема: crond седмична задача  (Прочетена 1683 пъти)

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
crond седмична задача
« -: Feb 19, 2018, 12:02 »
Искам crond да стартира задача в петък в 21 часа:
 - всеки първи петък в месеца с едни опции
 - всеки втори, трети, четвърти, пети - с други.

Прави архивиране на данни. Пробвах

0 21 1-7 * 5 do-backup --level=1
0 21 8-31 * 5 do-backup --level=2

с идеята ако датата е до 7-ми да се стартира 1, а ако е 8-31 - 2, но не работи. Тогава се зачетох в man и пробвах това, което пише там:

0 21 1 * 5 do-backup --level=1
0 21 2-5 * 5 do-backup --level=2

което трябва да е 1-ви петък - 1, а 2-ри до 5-ти петък - 2, но и това не работи.

Ако не стане с cron, ще трябва да анализирам деня в изпълнявания скрипт, а ме мързи :) .

Ще съм много благодарен ако ударите едно рамо  [_]3.
Slackware 14.2

man crontab
Цитат
To request the last Monday, etc.  in a month, ask for  the  “5th”  one.
       This  will  always  match the last Monday, etc., even if there are only
       four Mondays in the month:

              # run at 11 am on the first and last Mon, Tue, Wed of each month
              0 11 1,5 * mon-wed date

       When the fourth Monday in a month is the last, it  will  match  against
       both  the “4th” and the “5th” (it will only run once if both are speci‐
       fied).
« Последна редакция: Feb 19, 2018, 12:05 от laskov »
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

Naka

  • Напреднали
  • *****
  • Публикации: 3395
    • Профил
Re: crond седмична задача
« Отговор #1 -: Feb 19, 2018, 12:55 »
При мене Центос5 пише друго
man 5 crontab
Цитат
Note: The day of a command’s execution can be specified by two fields — day of month, and day of week.  If both fields are restricted (ie, aren’t *), 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

Аз го разбирам така: ако си задал едновременно деня (1-30) и деня в седмицата (неделя-понеделник) то те са обединени с OR.
Крона се стартира и в зададеният ден и в зададеният ден от седмицата.
« Последна редакция: Feb 19, 2018, 12:57 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

spec1a

  • Напреднали
  • *****
  • Публикации: 3852
    • Профил
Re: crond седмична задача
« Отговор #2 -: Feb 19, 2018, 12:57 »
   Ще трябва да напишеш bash скрипт,който да ти проверява деня от
седмицата и деня от месеца:

#!/bin/bash

d=$(date +%u)
n=$(date +%d)

# friday:
if [ $d -eq 5 ]; then
# 1st friday:
 if [ $n -lt 8 ]; then
  ...command...
...

и така нататък, $(date +%u) е деня от седмицата,$(date +%d) е деня
от месеца.Нагласяш от crontab да ти стартира този скрипт.
   Успех !
« Последна редакция: Feb 19, 2018, 13:00 от spec1a »
Активен

malin

  • Гост
Re: crond седмична задача
« Отговор #3 -: Feb 19, 2018, 13:06 »
Възможно ли е да става така?
https://superuser.com/questions/428807/run-a-cron-job-on-the-first-monday-of-every-month/1294027#1294027
Активен

makeme

  • Напреднали
  • *****
  • Публикации: 895
  • Distribution: Many
  • Window Manager: KDE
    • Профил
Re: crond седмична задача
« Отговор #4 -: Feb 19, 2018, 13:16 »
Възможно ли е да става така?
https://superuser.com/questions/428807/run-a-cron-job-on-the-first-monday-of-every-month/1294027#1294027
Еми колегата точно това е пробвал, но съдейки и по моя ман (убунту, и е същия като на Naka), @Naka има право.

Като погледнах надолу, пише следното:

Код:
       # Run on every second Saturday of the month
       0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"

При това положение, явно няма точно такава функционалност (а горното е точно OR)и трябва сам да си правиш проверка за деня (test $(date +\%u) -eq 6 &&)

ПП: за да не е объркващо, ще го напиша направо:

Код:
0 21 1-7 * * test $(date +\%u) -eq 5 && do-backup --level=1
0 21 8-31 * * test $(date +\%u) -eq 5 && do-backup --level=2

ПП2: Между другото в линка на @malin (като изключим точния отговор, който е линкнал) пише същото :)
« Последна редакция: Feb 19, 2018, 13:28 от makeme »
Активен

Distributions:  UbuntuMate; Kubuntu; CentOS; Kali; Raspberry Pi OS ...

malin

  • Гост
Re: crond седмична задача
« Отговор #5 -: Feb 19, 2018, 13:24 »
/etc/cron.monthly ?
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: crond седмична задача
« Отговор #6 -: Feb 19, 2018, 13:45 »
Всичко ми беше полезно!
Най ми хареса това:


ПП: за да не е объркващо, ще го напиша направо:

Код:
0 21 1-7 * * test $(date +\%u) -eq 5 && do-backup --level=1
0 21 8-31 * * test $(date +\%u) -eq 5 && do-backup --level=2

Тествах го, работи и смятам да го оставя така. Благодаря много!  [_]3

Точният текст е:
Цитат
Код:
0 21 1-7 * * test $(date +\%u) -eq 5 && do-backup --level=0
1 21 8-31 * * test $(date +\%u) -eq 5 && do-backup --level=1
2 21 * * 1-4 do-backup
do-backup когато е без опцията прави само rsync
« Последна редакция: Feb 19, 2018, 14:20 от laskov »
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
crond crash
Настройка на програми
sunhater 2 1726 Последна публикация May 31, 2004, 10:51
от sunhater