Retejoj Povas Fari Planitajn Taskojn per Cron

horloĝo

Ni havas kelkajn redundajn kontrolajn sistemojn, kiuj regule plenumas procezojn. Iuj kuras ĉiun minuton, iuj unufoje nokte depende de tio, kion ili faras. Ekzemple, ni povus ekzekuti skripton, kiu eksportas ĉiujn klientojn, kiuj ne aĉetis dum 30 tagoj, por sendi al ili kuponon.

Prefere ol provi spuri ĉiujn ĉi tiujn permane, estas multe pli facile krei laborojn aŭtomate planitajn kaj plenumitajn. Ĉe Uniksaj sistemoj, ĉi tio plenumiĝas per Cron. Por vi, homoj, kiuj scias, kion vi faras, bonvolu eduki min kaj la legantojn, se mi elĵetas ian malinformon.

Estas bedaŭrinde, sed la tipa ttt-programisto tute ne konas Cron. Eĉ se ili estas, retejaj gastigaj kompanioj ofte ne provizas aliron al Cron aŭ subtenas ĝin. Mia gastiganto estas unu el la lastaj - ili permesas al vi uzi ĝin, sed ili ne subtenas ĝin.

Kio estas Cron?

Cron estas nomumita laŭ la greka vorto Chronos, signifante tempo. Cron funkcias en kontinua buklo por funkciigi taskojn amasigitajn de Crontab (eble nomata por klapetoulator. Tiuj taskoj estas kutime nomataj Cronjobs, kaj povas referenci skriptojn en via retejo.

Cron-Diagramo-Klarigo

Kiel mi starigas la Crontab

Igi Cron efektive funkcii povas esti malfacila, do jen kion mi lernis kaj kiel mi faris ĝin Se Suĉu:

  1. Mi starigis mian skripton por kontroli Twitter API por vidi, ĉu iu respondis @ifsuck. Mi komparis tiujn mesaĝojn kun la mesaĝoj, kiujn mi jam konservis en la retejo, enigante iujn novajn.
  2. Post kiam la skripto funkciis, mi ebligis permesojn por la Uzanto plenumi la skripton (744) kaj aldonis la skriptreferencon al mia Cronjob-dosiero - pli pri tio poste.
  3. Mi tiam devis ensaluti al mia retejo per SSH. Sur Mac, tio bezonis malfermi Terminalon kaj tajpi SSH salutnomo@domajno.com kie uzantnomo estis la uzantnomo, kiun mi volis uzi kaj domajno estis la retejo. Oni tiam petis min kaj donis la pasvorton.
  4. Mi tiam provis ruli la skripton rekte de la komanda peto tajpante la dosiernomon kaj relativan vojon sur la servilo: /var/www/html/myscript.php
  5. Post kiam mi funkciis ĝuste, mi aldonis la necesan Unikso-kodon en la unua linio de la dosiero: #! / usr / bin / php -q . Mi kredas, ke ĉi tio simple diras al Unikso-Sistemo uzi PHP por plenumi la skripton.
  6. Ĉe la komandlinio Terminalo, mi tajpis kroniko (aliaj eble bezonos tajpi crontab -e) kaj premu enen ... kaj nur tio necesis!

Sintakso por via dosiero Cronjob

Koncerne al la numero 2 supre, Cron uzas spritan skemon por determini kiam viaj skriptoj estos plenumitaj. Fakte vi povas efektive kopii kaj alglui ĉi tion en vian Cronfile (ĉe mia gastiganto, ĝi situas en / var / spool / cron / kun la dosiernomo same kiel mia salutnomo).

# + —————- minuto (0 - 59)
# | + ————- horo (0 - 23)
# | | + ———- tago de monato (1 - 31)
# | | | + ——- monato (1-12)
# | | | | + —- tago de semajno (0 - 6) (dimanĉo = 0 aŭ 7)
# | | | | |
* * * * * /var/www/html/myscript.php

Ĉi-supre plenumos mian skripton ĉiun minuton. Se mi nur volus ĝin funkcii unufoje hore, mi nur metus kiom da minutoj post la horo mi volas, ke ĝi funkciu, do se ĝi estus ĉe la 30-minuta marko:

30 * * * * /var/www/html/myscript.php

Certigu, ke vi ankaŭ agordis la permesojn al ĉi tiu dosiero kiel plenumebla! Mi trovis, ke sintakso, permesoj kaj ekzekuto de krontab de la fenestro Terminal estas la plej gravaj faktoroj. Ĉiufoje kiam mi konservos la dosieron, mi trovus, ke miaj permesoj ankaŭ bezonas reagordi!

ĜISDATIGU: Se vi ŝatus certigi, ke la laboroj funkcias, unu simpla maniero estas ĝisdatigi datumbazan kampon kun la lasta fojo, kiam la skripto estis lanĉita. Se ĝi estas pli malofta, vi povas simple skribi retpoŝton senditan al vi mem.

Pliaj Cron-Rimedoj:

Kiom da laboroj vi povus aŭtomatigi uzante Cron?

8 Komentoj

  1. 1

    Bone pritraktita artikolo pri starigo de cron, por iu nova al crojobs, la plej malfacila parto en starigo de cron estas eltrovi la ekzercan intervalon de cronjob, kaj estas sufiĉe komune akiri malĝustan intervalon en la unua provo. Se viaj kronlaboroj estas temposentemaj, estas bone enmeti iujn kodojn en la skripto por ripeti statuson, por ke vi informiĝu pri la stato de laboro.

  2. 2

    Saluton Doug,

    Paro da aferoj konsiderindaj kiam vi laboras kun cron-laborpostenoj.

    Unue, post kelkdeko, vi dezirus, ke vi havu UI, datumbazon kaj anglaspektan sintakson 😉

    Due, cron lanĉos la laboron en la difinita tempo, sendepende de ĉu la antaŭa alvoko de la laboro finiĝis. Do plenumi laboron unufoje en minuto, kiu daŭras 2 minutojn, rapide kondukos al multaj samaj laboroj.

    Poste estas preskaŭ neniuj raportoj pri eraro, kiam io fuŝiĝas, do vi devos aldoni vian propran eraron raportante.

    Mi traktis ĉi tiujn per kelkaj manieroj:
    - ĉu la aplikaĵo ekfunkciis per cron-aspekto en datumbazo por determini tion, kion oni devas lanĉi. Rulu ĝin unufoje minuton aŭ horon, depende de tio, kion vi volas
    - ĉu ĉiu skripto kreu 'ŝlosan' dosieron en / tmp kaj se ĝi ekzistas, ne rekomencu, ĉi tio malebligas duplikatajn laborojn se vi ne volas ilin
    - se la skripto trovas la seruran dosieron pli aĝa ol 1 horo (aŭ kio ajn sugestas, ke vi mortis) sendu retpoŝtan alarmon
    - ĉu la skripto sendu retpoŝton pri malsukceso de la laboro, do vi scias, ke io fuŝiĝis
    - Rigardu kadrojn kiel Flux aŭ komercajn planilojn, kiam viaj bezonoj superas kelkajn skriptojn

    chris

  3. 4

    Mi ankaŭ aldonos, ke ĉe plej multaj Linuksaj / Uniksaj sistemoj, "crontab -e" estas tio, kion vi uzas por redakti vian crontab. Mi pensas, ke via gastiganto (Jumpline) uzas modifitan version pro sekurecaj kialoj.

  4. 5

    Mi ankoraŭ memoras la unuan tagon, kiam mi renkontis Cronnie. Mi aŭdis aferojn pri ŝi, ke ŝi estas fidinda, ĉiam akurate, sed kelkfoje iom konfuza pri siaj intencoj.

    Mi trovis ĉi tion vera, ĉar ŝi unue estis kompleta mistero por mi. Post demandado ĉirkaŭ ŝi, mi ekkomprenis sufiĉe rapide, kiel ŝi ŝatis operacii. Nun mi ne povas imagi pasi tagon sen ŝi en mia vivo. Ŝi ekscitas la sekularon, kaj levas multajn ŝarĝojn de miaj ŝultroj.

    Ĉio serioze, mi sentas, ke mi nur skrapis la surfacon per tio, kion mi povas aŭtomatigi per cron-laboroj. Ili vere estas la plej bona amiko de programistoj. Se vi uzas iun kiel CPanel por administri vian servilon, ĝi provizas multe pli amikan interfacon por krei kronojn. Kompletigu kun falmenuoj por minuto, horo, tago, monato, ktp, kiuj konstruas la kronlinion por vi.

  5. 7

    Mi certe vidas, ke ĉi tio estas io, kion ĉiu komercisto devas uzi ... Ĉu iu povas doni ĉi tiun servon, ĉar ĝi sonas iomete tro "te technika"?

Kion vi pensas?

Ĉi tiu retejo uzas Akismeton por redukti spamon. Lernu, kiel via komento datiĝas.