Portál AbcLinuxu, 25. prosince 2025 21:39
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
Ale s tym %W je to zaujimave: jeden by si myslel, ze implementacia bude dodrziavat ISO definiciou toho, co je prvy tyzden v roku. Hladim do manualu strftime(3) na FreeBSD, zjavne ISO nedodrziava. Mimochodom, ISO standard nie je v tomto bode dodrzany ani v MS Outlook-u. Spravnu ISO kompatibilnu implementaciu maju napr. kalendare mobilnych telefonov istej finskej znacky.
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.
Uplne rovnaky problem by nastal, keby islo o spustanie cron jobu kazdy parny den v mesiaci; co navyse do cronu zadat mozno, ze ano.
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.