vixie-cron, zadania "weekly" a zmiana czasu

Adam Ryba adam.ryba w gmail.com
Śro, 11 Lis 2009, 21:09:58 CET


W dniu 9 listopada 2009 13:36 użytkownik Jacek Osiecki
<joshua w hybrid.pl> napisał:
> Tak mnie ostatnio tknęło gdy zobaczyłem podwójne backupy...
> Czy to poniższe przypadkiem nie oznacza problemów?
>
> root w hotel ~> grep weekly /etc/cron.d/crontab
> 02 2 * * 0      root    /bin/run-parts /etc/cron.weekly
[...]
> cron.weekly będzie wykonywany o 2:20 w każdą niedzielę.

Nieco wcześniej, bo o 2:02 :-)

> Czy przypadkiem nie oznacza to, że przy każdej wiosennej zmianie czasu
> zadania tygodniowe się nie wykonają? W końcu po 1:59 pojawia się wtedy
> godzina 3:00...

Vixie-cron radzi sobie ze zmianą czasu, jest to dość dobrze opisane w
dokumentacji (niestety, w polskim manie nie ma o tym słowa):

$ LANG=en man cron
[...]
   Daylight Saving Time and other time changes
       Local  time  changes  of less than three hours, such as those caused by
       the start or end of Daylight Saving Time, are handled specially.   This
       only  applies to jobs that run at a specific time and jobs that are run
       with a granularity greater than one hour.   Jobs  that  run  more  fre-
       quently are scheduled normally.

       If time has moved forward, those jobs that would have run in the inter-
       val that has been skipped will be run immediately.  Conversely, if time
       has moved backward, care is taken to avoid running jobs twice.

       Time  changes  of more than 3 hours are considered to be corrections to
       the clock or timezone, and the new time is used immediately.

Poza zajrzeniem do dokumentacji, łatwo to sprawdzić samodzielnie,
obserwując jak odpalane są zadania w momencie zmiany czasu.
Przykładowo trzy taski: tygodniowy, godzinny i co 15 minut:

# cat /etc/cron.weekly/test_weekly
#!/bin/sh
/bin/echo "WEEKLY:" `/bin/date` >> /tmp/cron.txt

# cat /etc/cron.hourly/test_hourly
#!/bin/sh
/bin/echo "HOURLY:" `/bin/date` >> /tmp/cron.txt

# crontab -l
[...]
*/15 * * * * /bin/echo "CRON15:" `/bin/date` >> /tmp/cron.txt

Przy zmianie czasu na letni, task tygodniowy nie ginie, tylko zamiast
o 2:02 CET będzie uruchomiony o 3:00 CEST, natomiast pozostałe taski
sa wykonywane zgodnie z harmonogramem, odpowiednio co godzinę i co 15
minut:

CRON15: Sun Mar 29 01:45:01 CET 2009
CRON15: Sun Mar 29 03:00:01 CEST 2009
WEEKLY: Sun Mar 29 03:00:01 CEST 2009
HOURLY: Sun Mar 29 03:01:01 CEST 2009
CRON15: Sun Mar 29 03:15:01 CEST 2009

Przy powrocie do normalnego czasu, task tygodniowy jest wykonywany
tylko raz, zgodnie z rozkładem o 2:02 CEST i nie jest powtarzany o
2:02 CET. Pozostałe taski sa wykonywane normalnie:

CRON15: Sun Oct 25 01:45:01 CEST 2009
CRON15: Sun Oct 25 02:00:01 CEST 2009
HOURLY: Sun Oct 25 02:01:01 CEST 2009
WEEKLY: Sun Oct 25 02:02:01 CEST 2009
CRON15: Sun Oct 25 02:15:01 CEST 2009
CRON15: Sun Oct 25 02:30:01 CEST 2009
CRON15: Sun Oct 25 02:45:01 CEST 2009
CRON15: Sun Oct 25 02:00:01 CET 2009
HOURLY: Sun Oct 25 02:01:01 CET 2009
CRON15: Sun Oct 25 02:15:01 CET 2009
CRON15: Sun Oct 25 02:30:01 CET 2009
CRON15: Sun Oct 25 02:45:01 CET 2009
CRON15: Sun Oct 25 03:00:01 CET 2009
HOURLY: Sun Oct 25 03:01:01 CET 2009
CRON15: Sun Oct 25 03:15:01 CET 2009

Aha, i wersja vixie-cron:
$ rpm -q vixie-cron
vixie-cron-4.1-23.i686

Pozdrawiam,

-- 
Adam Ryba


Więcej informacji o liście dyskusyjnej pld-devel-pl