Portál AbcLinuxu, 11. května 2025 07:12
Dobrý den,
lze nějak zadat do cronu spouštění úlohy v sudý a lichý týden ?
Děkuji za rady
echo `date +%W` % 2|bc
Na to nepotřebujete bc
, to zvládne i bash sám. Navíc 'date +%W
' se nemusí chovat správně na přelomu roku, takže bych spíš použil něco jako
if [ $[(`date +%s` / 604800) % 2] -gt 0 ]; then exit; fipřípadně bashismus
if (( (`date +%s` / 604800) % 2 )); then exit; fi
Mozno je zvyknuty pisat skripty, ktore musia byt prenositelne aj na BSD ci Solaris, kde bash nie je az takou samozrejmostou.
Tu horní konstrukci by měl zvládnout i tradiční Bourne shell.
Ale s tym %W je to zaujimave: jeden by si myslel, ze implementacia bude dodrziavat ISO definiciou toho, co je prvy tyzden v roku.
I když bude, stejně může na přelomu roku nastat situace, že budete mít třeba dva sudé/liché pondělky za sebou. Je to stejné, jako kdybyste sudost/lichost dne posuzoval podle sudosti/lichosti pořadového čísla dne v týdnu.
V tomto případě by ale bylo vhodnější neposuzovat paritu ani podle absolutního pořadí, ani podle pořadí v rámci roku, ale podle pořadí v rámci školního roku (s vynecháním prázdnin).To je dost jedno, jde o to, že je potřeba jeden týden spustit jednu věc a druhý týden druhou věc. Cron (klasický) neumí periodu 14 dní a už vůbec ne periodu 14 dní s fázovým posunem 7 dní.
Ovšem stroje tu jsou pro lidi, ne lidi pro stroje...Zlaté slová, do kameňa vytesať.
Hladim do manualu strftime(3) na FreeBSD, zjavne ISO nedodrziava.Neviem či to s tým súvisí, ale poradové číslo týždňa v roku závisí aj od locale.
strftime()
podle POSIXové manuálové stránky tři různé šablony: %U
, %V
a %W
. Šablona %W
označuje jedničkou první týden, který je celý v daném roce, %U
dělá totéž pro týdny začínající nedělí. Šablona %V
používá tu oficiální specifikaci, že za první se považuje první týden (začínající pondělím), kterého je v daném roce většina. Žádná z nich by neměla záviset na locale. Je ale možné, že na některých systémech není strftime()
POSIX compliant.
Vysel jsem Unixu a pisu scripty, aby sly v csh
csh
(nebo jeho rozšíření) a není sh
(nebo jeho rozšíření), bude výrazně méně než těch, kde je to naopak.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.