Манипулировать строками данных. Запросить ассортимент баз данных. Отправка многочастных почтовых сообщений. Разбор XML.
Мы все слышали о многих мощных и эффективных применениях PHP как веб-языка. Но вы можете комбинировать PHP с другими инструментами для достижения различных результатов. Одним из таких инструментов является Cron.
Что такое Крон?
Cron — это просто модуль Linux, который позволяет вам запускать команды в заранее установленное время или через определенные промежутки времени. В Windows это называется запланированными задачами. Название Cron на самом деле происходит от того же слова, из которого мы получаем слово хронология, что означает порядок времени.
Используя Cron, разработчик может автоматизировать такие задачи, как рассылка электронных рассылок, которые лучше отправлять в нерабочее время, автоматическое обновление статистики или восстановление статических страниц из динамических источников. Системные администраторы и веб-узлы могут создавать отчеты о квотах на своих клиентах, выполнять автоматическое выставление счетов по кредитным картам или выполнять аналогичные задачи Крон есть что-то для всех!
Скрипт PHP
Прежде чем мы сможем даже подумать о запуске программы, нам потребуется скрипт для запуска. Этот скрипт может быть чем угодно, но ради этого урока давайте разберемся с небольшим почтовым скриптом. Представьте, например, что вы являетесь акционером McDonald’s. Вы едите там каждый день — завтрак, обед и ужин. Вы даже должны попросить сотрудника McDonald’s вытереть свое место, прежде чем сесть, чтобы насладиться едой Super Sized Happy Meal, потому что, в конце концов, вы являетесь акционером!
Таким образом, вы пишете сценарий, который проверяет отчет Доу-Джонса каждый день после того, как в 16:00 прозвучит последний звонок. Поскольку вы занятой человек и не можете позволить себе отвлечься от написания PHP-кода, вы хотите, чтобы эта цифра была отправлена вам по электронной почте. Давайте назовем эту переменную $mcdonalds
Он будет передан в ваш почтовый скрипт из файла с именем checktock.php.
Вот как может выглядеть этот файл (mailstock.php):
<?php
// mailstock.php
include('checkstock.php');
mail('[email protected]','McDonalds Stock','Stock Price: '.$mcdonalds,'From:[email protected]');
?>
Поскольку это просто иллюстративный пример, подробности checktock.php выходят за рамки этого обсуждения.
Ломая крон
Теперь давайте попробуем настроить автоматический запуск mailstock.php. Если вы системный администратор, вы сможете напрямую взаимодействовать с Cron. При стандартной настройке Redhat задания выполняются из /etc/crontab
Мы устанавливаем интервалы из четырех каталогов, которые сортируют задания по часам, дням, неделям и месяцам.
Однако иногда вам может потребоваться выполнить сценарий в одночасье, в выходные или в другое время, когда сервер вряд ли будет сильно загружен. Это где программа crontab
Этот исполняемый файл фактически является посредником между пользователями, у которых нет прав доступа к папкам и файлам Cron, и системой, необходимой для запуска заданий Cron.
Многие хосты предоставляют графический интерфейс для администрирования заданий Cron. Это может упростить настройку заданий Cron, однако в интересах понимания основных моментов этого процесса, в этом руководстве мы рассмотрим задания cron с точки зрения командной строки. Мы подойдем к этому с точки зрения обычного пользователя, но этот процесс практически идентичен и для системных администраторов.
Самый простой способ использовать crontab
crontab
# crontab –e
Эта команда «редактирует» crontab
Используя эту команду, вы сможете вводить команды, которые хотите выполнить. Моя версия Linux использует текстовый редактор vi. Вы можете найти информацию об использовании vi здесь .
Синтаксис этого файла очень важен — если вы ошибетесь, ваш crontab
Синтаксис файла должен быть следующим:
minutes hours day_of_month month day_of_week command
Все переменные, за исключением самой команды, являются числовыми константами. Помимо звездочки ( *
- Минуты: 0-59
- Часы работы: 0-23
- Day_of_month: 1-31
- Месяц: 1-12
- День недели: 0-6
Мы также можем включить несколько значений для каждой записи, просто разделив каждое значение запятой.
command
Итак, если мы хотим запускать сценарий каждое утро вторника в 8:15, наш файл mycronjob будет содержать в одной строке следующее содержимое:
15 8 * * 2 /path/to/scriptname
Как заставить PHP и Cron работать вместе
Все это кажется достаточно простым, верно? Не так быстро! Если вы попытаетесь запустить скрипт PHP таким способом, ничего не произойдет (за исключением очень специальных конфигураций, в которых PHP скомпилирован как исполняемый файл, а не как модуль Apache). Причина в том, что для анализа PHP его необходимо передать через Apache. Другими словами, страница должна вызываться через браузер или другие средства получения веб-контента.
Для наших целей я предполагаю, что конфигурация вашего сервера включает в себя wget, как и в случае большинства конфигураций по умолчанию. Чтобы проверить свою конфигурацию, войдите в оболочку. Если вы используете систему на основе RPM (например, Redhat или Mandrake), введите следующее:
# wget --help
Если вас приветствует идентификация пакета wget
Вы можете выполнить PHP, вызвав wget
# wget http://www.example.com/file.php
Теперь вернемся к файлу mailstock.php, который мы создали в первой части этой статьи. Мы сохранили его в корне нашего документа, поэтому он должен быть доступен через Интернет. Помните, что мы хотели, чтобы он работал в 4 вечера по восточному времени и отправил вам ваш драгоценный заключительный отчет? Поскольку я нахожусь в восточном часовом поясе, мы можем пойти дальше и настроить наш crontab на использование 4:00, но если вы живете в другом месте, вам, возможно, придется компенсировать разницу во времени при установке этого значения.
Вот как будет выглядеть мой crontab
0 4 * * 1,2,3,4,5 wget http://www.example.com/mailstock.php
Добавление команды в Cron
Итак, у нас есть текстовый файл. Что теперь? Теперь мы должны добавить текстовый файл с crontab
Для этого нам просто нужно вызвать команду crontab
# crontab stockcron
Резюме
Есть буквально тонны вещей, которые можно сделать с помощью PHP, и столько же, которые можно выполнить с помощью Cron. Надеемся, что это дает вам краткий обзор некоторых возможностей.
На самом деле вы можете объединить более сложные схемы PHP в одно задание cron, просто выполнив их через один файл PHP. Как я упоминал ранее, можно даже обойти wget, используя PHP в качестве языка сценариев оболочки. Это потребовало бы, чтобы PHP был скомпилирован как отдельный двоичный файл, и это повлекло бы за собой ряд рисков, но это можно (и было!) Сделано.
Суть в том, что все, что вы можете сделать с помощью PHP, вы можете автоматизировать с помощью Cron. Удачного кодирования!