Maaaring Patakbuhin ng Mga Website ang Nakaiskedyul na Mga Gawain kasama si Cron

orasan

Mayroon kaming isang bilang ng kalabisan na mga system ng pagsubaybay sa trabaho na regular na nagpapatupad ng mga proseso. Ang ilan ay tumatakbo bawat minuto, ang ilan ay isang beses sa isang gabi depende sa kanilang ginagawa. Halimbawa, maaari kaming magpatupad ng isang script na nagluluwas sa lahat ng mga customer na hindi bumili nang 30 araw upang magpadala sa kanila ng isang kupon.

Sa halip na subukang subaybayan ang lahat ng ito sa pamamagitan ng kamay, mas madali ang pagbuo ng mga trabaho na awtomatikong nakaiskedyul at naisakatuparan. Sa mga system na nakabatay sa Unix, ito ay nagagawa sa Cron. Para sa iyo na mga tao na alam kung ano ang iyong ginagawa, huwag mag-atubiling turuan ako at ang mga mambabasa kung nagtatapon ako ng anumang disinformation.

Nakalulungkot, ngunit ang tipikal na web developer ay hindi pamilyar sa Cron. Kahit na sila ay, ang mga kumpanya ng web hosting ay madalas na hindi nagbibigay ng pag-access sa, o suporta ng, Cron. Ang host ko ay isa sa huli - pinapayagan kang gamitin ito, ngunit hindi nila ito sinusuportahan.

Ano ang Cron?

Cron ay pinangalanan para sa salitang Griyego na Chronos, ibig sabihin oras. Tumatakbo ang Cron sa isang tuloy-tuloy na loop upang mapatakbo ang mga gawain na naipon ng Crontab (maaaring pinangalanan tabulator Ang mga gawaing iyon ay karaniwang tinutukoy bilang Cronjobs, at maaaring sumangguni sa mga script sa iyong site.

Paliwanag ng Cron Diagram

Paano ko mai-set up ang Crontab

Ang pagkuha ng Cron na talagang patakbuhin ay maaaring maging isang mahirap, kaya narito kung ano ang natutunan ko at kung paano ko ito ginawa Kung Suck:

  1. Inayos ko ang aking script upang suriin ang Twitter API upang makita kung may tumugon sa @ifsuck. Inihambing ko ang mga mensahe sa mga mensaheng nai-save ko na sa website, na naglalagay ng anumang mga bago.
  2. Sa sandaling gumagana ang script, pinapagana ko ang mga pahintulot para sa User na ipatupad ang script (744) at idagdag ang sanggunian ng script sa aking Cronjob file - higit pa sa paglaon.
  3. Kailangan kong mag-login sa aking website sa pamamagitan ng SSH. Sa isang Mac, kinuha iyon sa pagbubukas ng Terminal at pagta-type SSH username@domain.com kung saan ang username ay ang username na nais kong gamitin at ang domain ay ang website. Pagkatapos ay sinenyasan ako para sa at ibinigay ang password.
  4. Pagkatapos ay tinangka kong patakbuhin ang script nang direkta mula sa command prompt sa pamamagitan ng pagta-type ng filename at kamag-anak na landas sa server: /var/www/html/myscript.php
  5. Kapag natapos ko itong gumana nang tama, idinagdag ko ang kinakailangang Unix code sa unang linya ng file: #! / usr / bin / php -q . Naniniwala akong sinabi lamang nito sa Unix na magamit ang PHP upang maipatupad ang script.
  6. Sa linya ng utos ng Terminal, nagta-type ako crontab (ang iba ay maaaring kailanganing mag-type crontab -e) at pindutin ang ipasok ... at iyon lamang ang kailangan!

Syntax para sa iyong Cronjob File

Tungkol sa # 2 sa itaas, gumagamit ang Cron ng isang mapanlikha na pamamaraan para sa pagtukoy kung kailan isasagawa ang iyong mga script. Sa katunayan, maaari mo talagang kopyahin at i-paste ito sa iyong Cronfile (sa aking host, matatagpuan ito sa / var / spool / cron / na may filename na kapareho ng aking username).

# + —————- minuto (0 - 59)
# | + ————- oras (0 - 23)
# | | + ———- araw ng buwan (1 - 31)
# | | | + ——- buwan (1 - 12)
# | | | | + —- araw ng linggo (0 - 6) (Linggo = 0 o 7)
# | | | | |
* * * * * /var/www/html/myscript.php

Ipatupad ng nasa itaas ang aking script bawat minuto. Kung nais ko lamang itong tumakbo nang isang beses sa isang oras, ilalagay ko lamang kung gaano karaming mga minuto pagkatapos ng oras na nais kong tumakbo, kaya kung nasa 30 minutong marka ito:

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

Tiyaking itinakda mo ang mga pahintulot sa file na ito bilang naisakatuparan din! Nalaman ko na ang syntax, mga pahintulot, at pagpapatupad ng crontab mula sa window ng Terminal ang pinakamahalagang mga kadahilanan. Sa tuwing irereserba ko ulit ang file, hahanapin ko ang aking mga pahintulot na nangangailangan din ng pag-reset!

I-UPDATE: Kung nais mong matiyak na tumatakbo ang mga trabaho, ang isang simpleng paraan ay upang i-update ang isang patlang ng database sa huling oras na pinatakbo ang script. Kung mas madalang ito, maaari mo lamang i-script ang isang email na ipinadala sa iyong sarili.

Karagdagang Mga Mapagkukunang Cron:

Gaano karaming mga trabaho ang maaari mong i-automate ng paggamit ng Cron?

8 Comments

  1. 1

    Mahusay na sakop na artikulo sa pag-set up ng isang cron, para sa isang bago sa mga crojobs, ang pinakamahirap na bahagi sa pag-set up ng isang cron ay upang alamin ang agwat ng pagpapatupad ng cronjob, at napakahusay na makakuha ng isang maling agwat sa unang pagsubok. Kung ang iyong mga cronjobs ay sensitibo sa oras, mainam na isama ang ilang mga code sa script upang ma-echo ang katayuan upang mapanatili kang ipaalam sa katayuan sa pagpapatupad ng trabaho.

  2. 2

    Kumusta Doug,

    Isang pares ng mga bagay na dapat isaalang-alang kapag nagtatrabaho sa mga trabaho sa cron.

    Una, pagkatapos ng ilang dosenang, nais mong magkaroon ka ng isang UI, isang database at hitsura ng ingles na syntax 😉

    Pangalawa, tatanggalin ng cron ang trabaho sa tinukoy na oras, hindi alintana kung nakumpleto ang nakaraang pag-aanyaya ng trabaho. Kaya't ang pagpapatakbo ng isang trabaho isang beses sa isang minuto na tumatagal ng 2 minuto ay mabilis na hahantong sa maraming parehong trabaho na tumatakbo.

    Susunod, walang kasunod na walang pag-uulat ng error kapag may naganap, kaya kakailanganin mong idagdag ang iyong sariling pag-uulat ng error.

    Natugunan ko ang mga ito sa ilang mga paraan:
    - ma-trigger ang application sa pamamagitan ng cron look sa isang database upang matukoy kung ano ang kailangang patakbuhin. Patakbuhin ito isang beses sa isang minuto o oras depende sa gusto mo
    - Gawin ang bawat script na lumikha ng isang 'lock' file sa / tmp at kung mayroon ito, huwag magsimulang muli, pinipigilan nito ang mga dobleng trabaho kung hindi mo nais ang mga ito
    - kung mahahanap ng script ang lock file na mas matanda sa 1 oras (o kung ano man ang magmumungkahi na namatay ka) magpadala ng isang alerto sa email
    - Ipadala sa script ang email sa pagkabigo ng trabaho upang malaman mo na may nangyari na mali
    - tingnan ang mga balangkas tulad ng Flux o mga iskedyul ng komersyal kapag ang iyong mga pangangailangan ay lumampas sa ilang mga script

    Chris

  3. 4

    Idadagdag ko din yan sa karamihan ng mga system ng Linux / Unix, ang "crontab -e" ang ginagamit mo upang mai-edit ang iyong crontab. Sa palagay ko ang iyong host (Jumpline) ay gumagamit ng isang nabagong bersyon para sa mga kadahilanang panseguridad.

  4. 5

    Naaalala ko pa rin ang unang araw na nakilala ko si Cronnie. Narinig ko ang mga bagay tungkol sa kanya, na siya ay maaasahan, palaging nasa oras, ngunit kung minsan ay medyo nakalilito tungkol sa kanyang mga hangarin.

    Nalaman kong totoo ito dahil siya ay isang kumpletong misteryo sa akin noong una. Matapos tanungin ang tungkol sa kanya, mabilis akong nahuli kung paano niya gusto na gumana. Ngayon, hindi ko maisip ang isang araw na dumadaan na wala siya sa aking buhay. Ginagawa niyang kapana-panabik ang mundong ito, at inaangat ang maraming mga pasanin sa aking balikat.

    Sa lahat ng pagiging seryoso, nararamdaman kong napakamot lamang ako sa kung ano ang maaari kong i-automate sa mga trabaho sa cron. Tunay silang isang matalik na kaibigan ng mga developer. Kung gumagamit ka ng isang tulad ng CPanel upang pamahalaan ang iyong server, nagbibigay ito ng isang mas madaling interface upang lumikha ng mga cron. Kumpletuhin ang mga drop down na menu para sa minuto, oras, araw, buwan, atbp na bumubuo sa linya ng cron para sa iyo.

  5. 7

    Tiyak na nakikita ko ito ay isang bagay na dapat gamitin ng bawat nagmemerkado ... Mayroon bang sinumang maaaring magbigay ng serbisyong ito dahil medyo masyadong "masalimuot" ito?

Ano sa tingin ninyo?

Ang site na ito ay gumagamit ng Akismet upang mabawasan ang spam. Alamin kung paano naproseso ang data ng iyong komento.