Ambele expresii arată ca o dimineață de miercuri, și doar una dintre ele înseamnă o dată. 0 10 * * 3 se declanșează la 10:00 miercuri; * 10 * * 3 se declanșează în fiecare minut al orei a zecea, șaizeci de șanse de a porni același tunel. Dacă comanda este un lansator care nu verifică o sesiune existentă, a doua versiune nu este o eroare de programare, ci o buclă care produce proprietari concurenți. Citiți câmpul minutelor înainte de orice altceva.

Cele cinci câmpuri sunt minut, oră, ziua lunii, lună și ziua săptămânii, în această ordine, iar un asterisc în primul înseamnă fiecare minut.

Câmpul minutelor decide de câte ori

Numărul de la început este minutul, deci 0 10 * * 3 este primul minut al orei a zecea de miercuri. Înlocuirea lui cu un asterisc păstrează ora și ziua și elimină proprietatea de o singură dată, ceea ce produce șaizeci de potriviri. Cron nu elimină duplicatele: fiecare potrivire repornește comanda. Aceasta nu este o subtilitate despre cron, ci semantica câmpurilor, și merită citită referința planificatorului instalat, deoarece ordinea câmpurilor și coloana opțională a numelui de utilizator diferă între crontab-ul de utilizator și cel de sistem.

Testați cu o comandă inofensivă care își înregistrează propriul marcaj de timp timp de o zi. O linie în jurnal este un program; șaizeci de linii într-o oră este o lecție.

Ce face o a doua pornire primei

Un lansator bine crescut observă că conexiunea este deja activă și nu face nimic. O invocare brută a openvpn nu: creează un alt proces, o altă încercare de a lega un dispozitiv sau un port, și un alt set de rute care concurează pentru aceleași destinații. În NetworkManager, cererile repetate de activare pentru o conexiune sunt de obicei idempotente, și exact de aceea problema rămâne ascunsă până când cineva folosește o altă comandă. Programul ar trebui să întrebe proprietarul care administrează deja tunelul.

Apoi decideți ce înseamnă o cerere în timp ce conexiunea se stabilește. Nici activarea dublă, nici o coadă de porniri în așteptare nu sunt evident corecte; alegeți una și faceți lansatorul să o implementeze, în loc să lăsați planificatorul să decidă din întâmplare.

Numărați câmpurile înainte de comandă

Crontab-ul de utilizator și cel de sistem diferă prin faptul că apare sau nu o coloană cu numele de utilizator înainte de comandă. O intrare copiată între ele fie rulează sub contul greșit, fie transmite numele de utilizator ca prim cuvânt al comenzii. Verificați referința instalată, nu un ghid, și numărați câmpurile din propria linie. O intrare cu cinci câmpuri și un al șaselea cuvânt înainte de comandă este un crontab de sistem; aceeași linie într-un crontab de utilizator încearcă să execute acel cuvânt ca program.

Identitatea de execuție poartă mediul cu ea. O sarcină cron nu moștenește un inel de chei deblocat, o solicitare interactivă de parolă sau directorul de lucru în care ați testat.

Așteptați disponibilitatea, nu ceasul

O pornire reușită nu este un tunel funcțional. Este posibil ca clientul să încă își rezolve punctul final, să se autentifice sau să instaleze rute când sarcina se termină. Orice sarcină dependentă ar trebui să aștepte resursa protejată de care are într-adevăr nevoie, cu un timp limită și o eroare înregistrată, în loc de un număr fix de secunde. Această distincție separă un program care funcționează în majoritatea cazurilor de unul care eșuează silențios în dimineața aglomerată.

Dacă la acea oră este necesară MFA interactivă, sarcina poate cere atenția unei persoane, dar nu poate furniza răspunsul. Păstrați acel caz explicit în loc să încorporați o parolă reutilizabilă sau să reîncercați la nesfârșit.

Pentru o activare cu adevărat unică, folosiți mecanismul unic suportat. O regulă recurentă care trebuie reținută și eliminată este o viitoare pornire dublă.

Articole similare