Cron opravila po domače
Cron je urnik strežnika: ob določenem času požene ukaz. Nanj se opirajo varnostne kopije, uvozi cenikov in nočna poročila — in prav zato je tiho odpovedovanje tako drago.
Kako se bere urnik
Vsak vnos ima pet polj: minuta, ura, dan v mesecu, mesec, dan v tednu. Nekaj primerov:
| Zapis | Pomen |
|---|---|
*/5 * * * * | vsakih pet minut |
0 3 * * * | vsak dan ob treh zjutraj |
30 2 * * 0 | ob nedeljah ob 2.30 |
0 */6 * * * | vsakih šest ur |
WP-Cron ni pravi cron
WordPress ima svoj urnik, ki se sproži ob obisku strani. Pri strani z malo obiska to pomeni, da se opravila izvedejo z zamudo ali sploh ne; pri strani z veliko obiska pa se sprožajo prepogosto in po nepotrebnem obremenjujejo strežnik.
Pravilna rešitev je WP-Cron izklopiti in ga poganjati iz pravega crona vsakih nekaj minut.
Prekrivanje zagonov
Če opravilo teče dlje, kot je razmik med zagoni, se začne prekrivati samo s sabo. Posledice: podvojeni zapisi, zaklenjena baza, obremenjen strežnik.
Rešitev je zaklep: opravilo ob zagonu preveri, ali že teče, in se v tem primeru ne požene. V Linuxu to opravi flock, znotraj aplikacije pa zapis o tekočem opravilu.
Kako preveriš, ali sploh teče
- Zapisuj izpis Preusmeri ga v dnevniško datoteko, ne v nič.
- Beleži začetek in konec S časom in izidom.
- Obveščaj ob napaki Tiha napaka je najdražja.
- Nadzoruj „srčni utrip“ Če opravilo ne javi konca, naj to sproži opozorilo.
Pogoste pasti
- relativne poti — cron ne teče v isti mapi kot ti
- druge spremenljivke okolja kot v tvoji lupini
- druga različica PHP kot na spletu
- časovni pas strežnika ni tvoj
- pravice: opravilo teče kot drug uporabnik
Pogosta vprašanja
Koliko opravil je preveč?
Ni številke; pomembno je, da se ne prekrivajo in da vsako pusti sled v dnevniku.
Ali lahko cron nastavim v cPanelu?
Da, pod Cron Jobs. Pot do PHP in do skripte mora biti popolna.
Zakaj se poročila pošiljajo ob napačni uri?
Skoraj vedno zaradi časovnega pasu strežnika ali prehoda na poletni čas.
Opravila, ki tiho odpovedujejo?
Uredimo urnik, zaklepe in obveščanje, da izveš za napako, preden izve stranka.
Pošlji povpraševanje