Puncte:1

Lucrarea Cron a fost întârziată cu ~1 secundă

drapel us

Rulez următorul job cron

* * * * * data „+\%Y\%m\%dT\%H\%M\%S” > /path/to/log 2>&1

dar trece cu o secundă prea târziu, după cum scrie de ex.

20210817T210001

Cum mă pot asigura că lucrarea cron va rula la minutul întreg?

RonJohn avatar
drapel cn
Ar trebui să fie evident -- cu doar un pic de gândire -- că este nevoie de timp pentru ca cron să "se trezească", să scaneze toate crontaburile, determinând dacă o intrare trebuie să fie rulată. Acesta este adevărul dur.
Andrej Podzimek avatar
drapel cn
Dacă aveți nevoie de acest tip de precizie de sincronizare â care poate indica, de asemenea, o alegere greșită a software-ului pentru un anumit scop â, trebuie doar să utilizați cronometre `systemd` în loc de o configurație `cron` complet învechită. Cu cronometrele `systemd`, obțineți butoanele de configurare necesare pentru a găsi un echilibru între precizia de sincronizare și dispecerare. `AccuracySec` (care poate avea valori în μ, dacă este necesar) este cuvântul cheie de căutat [în documentație](https://www.freedesktop.org/software/systemd/man/systemd.timer.html). De asemenea, dacă totul se referă la înregistrarea unui marcaj de timp rotund, atunci doar rotunjiți marca de timp.
Puncte:12
drapel vn

Acest lucru este, de asemenea, acoperit la Eroare de server.

Personal sunt de acord cu acest citat: „Ceea ce Cron poate garanta este că munca ta va începe nu mai devreme de ora specificată”. Cu alte cuvinte, cron nu este cu adevărat conceput pentru a fi precis chirurgical la secunda. Majoritatea lucrărilor mele cron vor începe, de asemenea, la 01 sau chiar la 02 secunde după minutul întreg.

Pentru ca joburile cron să înceapă, cron va scana ce joburi trebuie să ruleze la un moment dat. Nu este o eroare dacă un job programat să înceapă la 12:00:00 va începe efectiv la 12:00:01, deoarece timpul de inițializare a cronului poate varia, în funcție de o serie de factori.

Dacă aveți nevoie de ceva care să declanșeze „aproape” (mulțumesc Kevin) exact în secunda, ar trebui să căutați o altă soluție decât cron - de exemplu systemd cronometre (mulțumesc Andrej), un script Python sau chiar un program C care monitorizează timpul pentru tine.

EDITARE: Alternativ (după cum sugerează Nonny Moose), puteți programa un script să ruleze cu un minut mai devreme și apoi să monitorizați timpul astfel încât să ruleze cât mai precis posibil când doriți să ruleze.

Irsu85 avatar
drapel cn
Și apoi puteți folosi crontab pentru a rula acel script la repornire
Artur Meinild avatar
drapel vn
Da, întradevăr! :-)
Nonny Moose avatar
drapel in
Ai putea chiar să-ți pornească programul, să zicem, cu un minut mai devreme, și apoi să monitorizeze constant timpul până când ar trebui să ruleze.
drapel ua
Pedant: *nu poți* avea ceva „declanșează exact în secunda”. Rulați sub un sistem de operare preventiv multitasking. Nucleul va programa procesul dvs. pentru a avea CPU atunci când nucleul simte că așa este, nu într-o secundă exactă. Dacă nu vă place asta, atunci ar trebui să utilizați [sched(7)](https://man7.org/linux/man-pages/man7/sched.7.html) pentru a solicita programarea în timp real garanții, care încă nu sunt perfecte, deoarece nucleul are o suprasarcină de programare diferită de zero.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.