На сайтах можна запускаць запланаваныя задачы з дапамогай Cron

гадзіны

У нас ёсць шэраг лішніх сістэм маніторынгу, якія рэгулярна выконваюць працэсы. Хтосьці бегае кожную хвіліну, хтосьці раз на ноч, у залежнасці ад таго, што робіць. Напрыклад, мы можам выканаць сцэнар, які экспартуе ўсіх кліентаў, якія не зрабілі пакупку на працягу 30 дзён, каб адправіць ім купон.

Замест таго, каб спрабаваць адсочваць усё гэта ўручную, значна прасцей ствараць заданні, якія аўтаматычна плануюцца і выконваюцца. У сістэмах на базе Unix гэта робіцца з дапамогай Cron. Людзі, якія ведаюць, што робіце, не саромейцеся навучаць мяне і чытачоў, калі я выкіну якую-небудзь дэзінфармацыю.

На жаль, але тыповы вэб-распрацоўшчык зусім не знаёмы з Cron. Нават калі яны ёсць, кампаніі, якія займаюцца хостынгам, часта не прадастаўляюць доступ да Cron і не падтрымліваюць яго. Мой гаспадар - адзін з апошніх - яны дазваляюць ім карыстацца, але не падтрымліваюць.

Што такое Крон?

Cron названа па грэчаскаму слову Chronos, што значыць час. Cron працуе ў бесперапынным цыкле для запуску задач, назапашаных Crontab (магчыма, названы па табулататар. Гэтыя задачы звычайна называюць Cronjobs і могуць спасылацца на сцэнарыі на вашым сайце.

Тлумачэнне дыяграмы Крона

Як наладзіць Crontab

Прымусіць Cron рэальна працаваць можа быць складана, таму вось што я даведаўся і як для гэтага зрабіў Калі смактаць:

  1. Я стварыў свой сцэнар для праверкі Twitter API каб даведацца, ці адказаў хто @ifsuck. Я параўнаў гэтыя паведамленні з паведамленнямі, якія я ўжо захаваў на сайце, уводзячы любыя новыя.
  2. Пасля таго, як сцэнар працаваў, я ўключыў дазволы для выканання сцэнарыя (744) і дадаў спасылку на сцэнар у мой файл Cronjob - пра гэта далей.
  3. Тады мне давялося ўвайсці на свой сайт праз SSH. На Mac спатрэбілася адкрыць тэрмінал і набраць тэкст SSH імя карыстальніка@domain.com дзе імя карыстальніка было імем карыстальніка, якое я хацеў выкарыстаць, а даменам быў сайт. Тады мне прапанавалі і ўвялі пароль.
  4. Затым я паспрабаваў запусціць сцэнар непасрэдна з каманднага радка, набраўшы імя файла і адносны шлях на серверы: /var/www/html/myscript.php
  5. Пасля таго, як я правільна працаваў, я дадаў неабходны код Unix у першы радок файла: #! / usr / bin / php -q . Я лічу, што гэта проста кажа Unix выкарыстоўваць PHP для выканання сцэнарыя.
  6. У камандным радку тэрмінала я набраў кронтаб (іншым можа спатрэбіцца набраць кронтаб -e) і націсніце Enter ... і гэта было ўсё, што трэба!

Сінтаксіс файла Cronjob

Што тычыцца № 2 вышэй, Cron выкарыстоўвае геніяльную схему для вызначэння тэрмінаў выканання вашых сцэнарыяў. На самай справе вы можаце скапіяваць і ўставіць гэта ў свой Cronfile (на маім хосце ён знаходзіцца ў / var / шпулька / cron / з імем файла такім самым, як маё імя карыстальніка).

# + —————- хвіліна (0 - 59)
# | + ————- гадзіна (0 - 23)
# | | + ———- дзень месяца (1 - 31)
# | | | + ——- месяц (1 - 12)
# | | | | + —- дзень тыдня (0 - 6) (нядзеля = 0 ці 7)
# | | | | |
* * * * * /var/www/html/myscript.php

Вышэй будзе выконвацца мой сцэнар кожную хвіліну. Калі б я хацеў, каб ён запускаўся раз у гадзіну, я проста ўказваў, колькі хвілін пасля гадзіны, калі я хачу, каб ён запускаўся, так што калі б гэта было на адзнацы 30 хвілін:

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

Пераканайцеся, што вы таксама ўсталявалі дазволы для гэтага файла як выкананы! Я выявіў, што сінтаксіс, дазволы і выкананне crontab з акна тэрмінала былі найбольш важнымі фактарамі. Кожны раз, калі я перазапісваў файл, я таксама знаходзіў свае дазволы, якія патрабуюць скіду!

АБНАЎЛЕННЕ: Калі вы хочаце пераканацца, што заданні працуюць, просты спосаб - абнавіць поле базы дадзеных з апошнім часам запуску сцэнарыя. Калі гэта больш рэдка, вы можаце проста напісаць ліст, адпраўлены сабе.

Дадатковыя рэсурсы Cron:

Колькі працоўных месцаў вы маглі б аўтаматызаваць, выкарыстоўваючы Cron?

8 Каментары

  1. 1

    Добра асветлены артыкул пра наладу cron, для кагосьці новага для crojobs, самая складаная частка ў наладжванні cron - гэта высветліць інтэрвал выканання cronjob, і зусім нядрэнна атрымаць няправільны інтэрвал з першай спробы. Калі вашы cronjobs адчувальныя да часу, добра ўключыць у скрыпт некаторыя коды для адлюстравання стану, каб вы атрымлівалі інфармацыю аб стане выканання задання.

  2. 2

    Прывітанне Дуг,

    Некалькі рэчаў, якія трэба ўлічваць пры працы з заданнямі cron.

    Па-першае, праз некалькі дзясяткаў вы пажадаеце мець карыстацкі інтэрфейс, базу дадзеных і сінтаксіс на англійскую мову 😉

    Па-другое, cron запусціць заданне ў пазначаны час, незалежна ад таго, завершана папярэдняе выкліканне задання. Такім чынам, выкананне задання раз у хвіліну, якое займае 2 хвіліны, хутка прывядзе да вялікай колькасці тых самых заданняў.

    Далей, калі нешта пойдзе не так, справаздач аб памылках няма, таму вам трэба будзе дадаць уласную справаздачу пра памылкі.

    Я звярнуўся да іх некалькімі спосабамі:
    - каб прыкладанне запускалася праз cron, шукаць у базе дадзеных, каб вызначыць, што трэба запусціць. Запускайце раз у хвіліну альбо гадзіну ў залежнасці ад таго, што вы хочаце
    - хай кожны сцэнар стварае файл "замак" у / tmp, і калі ён існуе, не пачынайце зноў, гэта прадухіляе паўтарэнне заданняў, калі вы іх не хочаце
    - калі скрыпт знойдзе файл блакавання старэйшы за 1 гадзіну (ці ўсё, што сведчыць пра вашу смерць), адпраўце паведамленне па электроннай пошце
    - хай скрыпт адправіць ліст пра збой працы, каб вы ведалі, што нешта пайшло не так
    - паглядзіце на такія фрэймворкі, як Flux або камерцыйныя планіроўшчыкі, калі вашы патрэбы выходзяць за рамкі некалькіх сцэнарыяў

    Крыс

  3. 4

    Я таксама дадам, што ў большасці сістэм Linux / Unix "crontab -e" - гэта тое, што вы выкарыстоўваеце для рэдагавання crontab. Я думаю, што ваш гаспадар (Jumpline) выкарыстоўвае змененую версію з меркаванняў бяспекі.

  4. 5

    Да гэтага часу памятаю першы дзень сустрэчы з Кроні. Я чуў пра яе тое, што яна была надзейнай, заўсёды своечасова, але часам трохі бянтэжыла свае намеры.

    Я палічыў, што гэта праўда, бо яна для мяне спачатку была поўнай загадкай. Распытаўшы пра яе, я даволі хутка зразумеў, як ёй падабаецца працаваць. Цяпер я не ўяўляю, каб у жыцці прайшоў дзень без яе. Яна робіць мірскае захапляльным і здымае шмат цяжараў з маіх плячэй.

    Калі сур'ёзна, я адчуваю, што я толькі падрапаў паверхню таго, што магу аўтаматызаваць пры дапамозе заданняў cron. Яны сапраўды лепшы сябар распрацоўшчыкаў. Калі вы выкарыстоўваеце кагосьці накшталт CPanel для кіравання серверам, ён забяспечвае значна больш зручны інтэрфейс для стварэння кронаў. У камплекце з выпадаючымі меню на хвіліну, гадзіну, дзень, месяц і г.д., якія ствараюць для вас радок cron.

  5. 7

    Я дакладна бачу, што гэтым павінен карыстацца кожны маркетолаг ... Ці ёсць хто-небудзь, хто можа прадаставіць гэтую паслугу, таму што яна гучыць занадта "тэхнічна"?

Што вы думаеце?

Гэты сайт выкарыстоўвае Akismet для барацьбы са спамам. Даведайцеся, як дадзеныя апрацоўваюцца каментар.