Веб-сайти можуть запускати заплановані завдання за допомогою Cron

годинник

У нас працює низка резервних систем моніторингу, які регулярно виконують процеси. Хтось біжить щохвилини, хтось раз на ніч залежно від того, що вони роблять. Наприклад, ми можемо виконати сценарій, який експортує всіх клієнтів, які не зробили покупку протягом 30 днів, щоб надіслати їм купон.

Замість того, щоб намагатися відстежувати все це вручну, набагато простіше створювати завдання, які автоматично плануються та виконуються. У системах на основі Unix це досягається за допомогою Cron. Для вас, люди, які знаєте, що робите, сміливо навчайте мене та читачів, якщо я викину будь-яку дезінформацію.

На жаль, але типовий веб-розробник взагалі не знайомий з Cron. Навіть якщо вони і є, веб-хостингові компанії часто не надають доступ або підтримку Cron. Мій хост є одним із останніх - вони дозволяють тобі користуватися, але не підтримують.

Що таке Крон?

Cron названо грецьким словом Chronos, що означає час. Cron працює в безперервному циклі для запуску завдань, накопичених Crontab (можливо, названий табулятор. Ці завдання зазвичай називають Cronjobs і можуть посилатися на сценарії на вашому сайті.

Пояснення на діаграмі Крон

Як налаштувати Crontab

Змусити Крона насправді працювати може бути складним завданням, тож ось що я дізнався та як це зробив Якщо смокче:

  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

Що стосується вищезазначеного No2, Cron використовує геніальну схему для визначення того, коли будуть виконуватися ваші скрипти. Насправді ви можете скопіювати та вставити це у свій файл Cronfile (на моєму хості він знаходиться в / var / spool / 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.

    По-перше, через кілька десятків вам захочеться мати користувальницький інтерфейс, базу даних та синтаксис на англійську мову english

    По-друге, cron запустить роботу в зазначений час, незалежно від того, завершено попереднє виклик роботи. Тож запуск роботи раз на хвилину, яка займає 2 хвилини, швидко призведе до того, що багато роботи буде виконано.

    Далі, поруч із повідомленням про помилки немає повідомлення, коли щось піде не так, тому вам потрібно буде додати власне повідомлення про помилки.

    Я звернувся до них кількома способами:
    - нехай програма запускається через cron look у базі даних, щоб визначити, що потрібно запустити. Запустіть це раз на хвилину або годину залежно від того, що ви хочете
    - попросіть кожен скрипт створити файл 'lock' у / tmp, і якщо він існує, не запускайте знову, це запобігає дублікату завдань, якщо ви їх не хочете
    - якщо скрипт знаходить файл блокування, старший за 1 годину (або все, що припускає, що ви померли), надішліть повідомлення електронною поштою
    - нехай сценарій надсилає електронний лист про збій роботи, щоб ви знали, що щось пішло не так
    - подивіться на такі фреймворки, як Flux або комерційні планувальники, коли ваші потреби виходять за рамки декількох сценаріїв

    Кріс

  3. 4

    Я також додам, що в більшості систем Linux / Unix “crontab -e” - це те, що ви використовуєте для редагування вашого crontab. Я думаю, що ваш хост (Jumpline) використовує змінену версію з міркувань безпеки.

  4. 5

    Досі пам’ятаю перший день, коли я зустрів Кронні. Я чув про неї щось таке, що вона була надійною, завжди вчасно, але іноді трохи заплутувалась у своїх намірах.

    Я переконався, що це правда, оскільки вона спочатку була для мене повною таємницею. Розпитавши про неї, я досить швидко зрозумів, як їй подобається працювати. Зараз я не уявляю, щоб у моєму житті пройшов день без неї. Вона робить буденне захоплюючим і знімає багато тягарів з моїх плечей.

    Поправді кажучи, я відчуваю, що я подряпав лише поверхню того, що можу автоматизувати за допомогою cron-завдань. Вони справді є найкращим другом розробників. Якщо ви використовуєте когось на кшталт CPanel для управління своїм сервером, він надає набагато зручніший інтерфейс для створення крон. У комплекті з випадаючими меню на хвилини, години, дні, місяці тощо, які будують для вас лінію cron.

  5. 7

    Я точно бачу, що цим повинен користуватися кожен маркетолог ... Чи є хтось, хто може надати цю послугу, тому що це звучить занадто «технічно»?

Що ви думаєте?

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.