- De ce poate fi cauzată această defecțiune în Cron?
Aceasta nu este o problemă cron.
Cron este un programator foarte simplu care pur și simplu începe un nou lot la ora/intervalul pe care îl specificați.
Când, indiferent de motiv, sarcina dvs. în lot nu se poate finaliza la timp înainte de începerea următoarei iterații, încheiați cu două procese concurente. Cron nu face nimic pentru a preveni asta.
Depinde într-adevăr de ipotezele și codul dvs. dacă acest lucru provoacă imediat o problemă sau nu.
Este posibil ca imediat a doua iterație să creeze o formă de blocaj și să se blocheze pe termen nelimitat, 10 secunde mai târziu a treia iterație se blochează în impasul cauzat de a doua iterație și 10 secunde mai târziu și următoarele iterații se blochează imediat. Etc. Etc. Asta poate rapid bulgăre de zăpadă.
Sau ar putea fi un proces mult mai lent, în care pentru fiecare lot individual, timpul de execuție crește încet și, în loc să blocheze din ce în ce mai multe loturi de rulare mai lungi ajung să ruleze concomitent.Acest lucru (în cele din urmă) mărește încărcarea și mai mult, declanșează conflictul de resurse și are ca rezultat joburi în loturi care durează și mai mult până la finalizare și mai multe loturi simultane/concurente și lipsa de resurse.
- Când creez un sistem de așteptare pentru, de exemplu, codigniter în loc de un proces Cron, prin ce este diferit de cron?
După cum ați experimentat aici, cron nu este un sistem de așteptare. Este doar un programator foarte simplu.
Dacă doriți să adăugați un control mai complex al jobului, trebuie să creați asta. Vezi de exemplu acest răspuns Aici despre cum să împiedicați pur și simplu mai multe loturi cron să ruleze concomitent în specificația dvs. de lot.
În caz contrar, rularea a ceva mai avansat decât simplu cron poate fi o soluție.
- Voi fi liber de astfel de probleme când voi face PHP un sistem care rulează în fundal?
Dacă cauza principală este faptul că codul dvs. se întrerupe ori de câte ori se execută două loturi simultan, măsurile concepute pentru a face codul să ruleze mai rapid nu vor elimina acest defect și nici nu vor împiedica acest lucru să se repete.