Sziasztok, azt a feladatot kaptam, hogy minden hónap 1. és 3. hétfőjén futtassak le egy scriptet, gondoltam, automatizálom. Előkaptam a crontabot, és beszúrtam ezt:
0 7 1-7,15-21 * 1 /usr/local/bin/script
Gondoltam ezzel végeztem is, de valami nem kerek, mert minden reggel lefuttatja :-(
A gugli találatok szerint is jól csináltam, van valakinek erre megoldása?
- 491 megtekintés
Hozzászólások
1-7 az intervallum nem?
- A hozzászóláshoz be kell jelentkezni
Szerintem is.
- A hozzászóláshoz be kell jelentkezni
A gugli találatok szerint is jól csináltam
A gugli sem érthet mindenhez. A manual ezt mondja:
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 (i.e.,
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.
- A hozzászóláshoz be kell jelentkezni
Valami hasonló?
0 7 1-7,15-21 * * /bin/date "+\%w" | /bin/fgrep -sq 1 && /usr/local/bin/script
- A hozzászóláshoz be kell jelentkezni
Van segítség, https://crontab.guru/#0_7_1-7,15-21_*_1
- A hozzászóláshoz be kell jelentkezni
ez volt beállítva nálam is, mégis naponta futtatja :-(
- A hozzászóláshoz be kell jelentkezni
Én is azt mondanám a "-" ranget jelöl így és a man alapján inkább így :
0 7 1,7,15,21 * 1 /usr/local/bin/script
“At 07:00 on day-of-month 1, 7, 15, and 21 and on Monday.”
- A hozzászóláshoz be kell jelentkezni
Valóban ranget jelöl, de ott a végén az 1-es, ami a hétfőt jelenti, így a logikám szerint hiába van harmadika, ha nem hétfőre esik, nem kellene lefutnia.
Gondolom azért van 1-7-ig megadva, mert nem tudjuk, hogy abban a hónapban melyik napra esik az 1. hétfő.
- A hozzászóláshoz be kell jelentkezni
A problémát egy félreértés okozza, az "és" szó nem logikai és műveletet jelent, hanem inkább "és lefut"-ot kell érteni alatta. Azaz a fenti formátum lefut a hónap első 7 napján, és lefut a hónap 15-21. napján, és lefut hétfőnként 7:00-kor. A Crontab guru jól mondja, csak pontosan kell fordítani.
Van egy Quarz nevű cron klón, ott a "0 0 7 ? * 2#1,2#3" formátummal tudod megoldani amit szeretnél.
http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html
A cron nem ennyire részletes, legközelebb a "0 7 */2 * 1" formátummal juthatsz, itt vagy az első és harmadik hétfőn fut le, vagy néha a másodikon és negyediken (pl. novemberben). Attól függ mikor, hogy a hétfő páros vagy páratlan napra esik. Ha ez nem jó, akkor a "0 7 * * 1" formátummal lefut minden hétfőn 7-kor, és egy közbeiktatott sctiptnek kell kiszámolni a többit.
- A hozzászóláshoz be kell jelentkezni
csak pontosan kell fordítani
itt rontottam el :-) kicsit csalódtam a cronban
- A hozzászóláshoz be kell jelentkezni
A csalódás felesleges. Ahogy Mauzi elég korán jelezte, a dokumentáció teljesen egyértelmű: kétféleképp lehet megadni a "nap" információt. Meg lehet adni hónap-napja formában (ez a 3. mező, ha jól csalódok) és meg lehet adni hét-napja formában is (ez pedig az 5. mező. Ha mind a kettő explicit módon van megadva, akkor *bármelyik* teljesülése esetén lefut a megadott parancs. A klasszikus példa az, hogy minden péntek 13-án akarunk futtatni, akkor nem javasolt a hónap-napja mezőt 13-ra, a hét-napja mezőt pedig 5-re állítani, mert minden pénteken ÉS minden hó 13-án le fog futni. Hanem eldöntöd, hogy neked melyik feltételt könnyebb egy plusz paranccsal letesztelned - azt beteszed a futtatandó parancs elé plusz feltételként (mint itt több helyen : [ ... ] && formában) , és a másik feltételt állítod be a cronban.
- A hozzászóláshoz be kell jelentkezni
"A gugli találatok szerint is jól csináltam" Alighanem ezt találtad meg:
07 13 8-14 * * [ `date +\%u` = 3 ] && /root/scripts/test.sh
Ebből kihagytad a [] közötti részt, ami a "valódi" ellenőrzést végzi.
Szóval neked ilyesmi kéne:
0 7 1-7 * * [ `date +\%u` = 1 ] && /usr/local/bin/script
0 7 15-21 * * [ `date +\%u` = 1 ] && /usr/local/bin/script
Nem ellenőriztem le, de fogjuk rá hogy hihető.
- A hozzászóláshoz be kell jelentkezni
Köszönöm, ez kell nekem!
- A hozzászóláshoz be kell jelentkezni
Csak egy tipp:
Mi van akkor ha azt a feltételt nem cronnal vizsgálod, hogy az adott nap a hónap első/harmadik hetének hétfője, hanem a scripted elejébe teszed ezt meg?
- A hozzászóláshoz be kell jelentkezni
Naívan azt hittem, hogy ez menni fog egy időzítőnek önállóan is :-)
- A hozzászóláshoz be kell jelentkezni
Jól látom, a systemd timere se tudja? https://github.com/systemd/systemd/issues/6024
- A hozzászóláshoz be kell jelentkezni