Crontab выполнение php скрипта

Задания Cron на выполнение php-скриптов

Cron — это демон (программа, которая постоянно работает в системе в фоновом режиме), представляющий собой планировщик задач в UNIX-подобных операционных системах (включая сервер Apache), который в определенное время автоматически выполняет задания. Пример задания — копирование базы данных в определенное место на сайте (создание резервной копии).

Каждый пользователь системы может добавлять свои задания, указывая, в какое время и какие скрипты нужно выполнять от его имени. Задания могут выполняться, например, раз в день, раз в месяц, раз в год.. На вашем хостинге могут действовать ограничения на общее количество заданий и на то, как часто может выполняться задание (Например, не чаще 1 раза в 10 минут и не более 10 cron-заданий).

Задание (таблица crontab) включает 6 разделов, разделяемых пробелами или табуляцией.

минуты часы день_месяца месяц день_недели команда

Первые пять разделов задают время выполнения скрипта:
минуты: 0-59
часы: 0-23
день месяца: 1-31
месяц: 1-12
день недели: 0-7 (0 и 7 — воскресенье)
* — диапазон с первого до последнего.

команда задает скрипт, который нужно выполнять, например, скрипт на Perl или на php. Если команда передает текст в стандартный вывод, этот текст отправляется на e-mail пользователя, но стандартный вывод можно перенаправить в /dev/null:

Примеры задания времени выполнения скрипта:
0 22 * * * — каждый день в 22:00
0 0 1 * * — раз в месяц
0,30 10-22 * * * — каждые полчаса между 10:00 и 22:00
*/10 * * * * — каждые 10 минут

Права доступа

На скрипт рекомендуется выставить права доступа 755 (права на исполнение).

Добавление задания Cron в ISPmanager

В ISPmanager параметры выполнения для крона задаются в отдельных полях формы.

Войдите в Главное — Планировщик и нажмите кнопку «Создать«. В появившейся форме задайте Команду и Период (периодичность выполнения), а также выберите опцию Не отправлять отчёт по e-mail.

Команда — это путь до интерпретатора (у меня сработало просто php), пробел и полный путь до скрипта:

php /home/логин/public_html/myscript.php

*** Полный путь до скрипта включает путь к корневой директории сервера, который можно узнать, выполнив в браузере:

echo $_SERVER['DOCUMENT_ROOT'];
?>

Период — периодичность выполнения задания можно выбрать из списка (базовый режим):
каждый час — выполнение в 0 минут каждого часа.
каждый день — выполнение ежедневно ровно в 00:00.
раз в неделю — выполнение каждое воскресенье ровно в 00:00.
раз в месяц — выполнение первого числа каждого месяца ровно в 00:00.
раз в год — выполнение каждый год 1 января ровно в 00:00.

или задать вручную (экспертный режим)

Добавление задания Cron в cPanel

В cPanel войдите в «Дополнительно», «Задания Cron» и заполните форму добавления задания.

Читайте также:  Set class variable in java

Особенности выполнения php-скрипта в задании Cron

В выполняемом php-скрипте не должны использоваться переменные окружения. Например, адреса следует прописывать явно. Дело в том, что при выполнении cron-задания в php-скрипте недоступны серверные переменные (например, $_SERVER, $_GET), т.к. веб-сервер Apache не участвует в работе демона cron и не заполняет переменные окружения.

В команде необходимо указать путь к php (может отличаться для разных хостингов), например, /usr/bin/php, затем пробел и полный путь к файлу скрипта:

/usr/bin/php /home/логин/public_html/myscript.php

Пример Cron-задания для выполнения php-скрипта один раз в день (0 0 * * * — задает периодичность)

0 0 * * * /usr/bin/php /home/логин/public_html/myscript.php

Задания Cron на выполнение php-скриптов : 14 комментариев

Источник

Запуск PHP скрипта по расписанию cron. Когда не всё так ясно

image

В этой статье я расскажу о некоторых тонкостях запуска php-скриптов на хостингах, незнание которых может попортить немало нервов и начинающим программистам, и мастерам средней руки.
Причина написания статьи: проблемы с запуском скриптов на хостингах с разными настройками. А поскольку настройки могут быть разными, информация приводимая для общих случаев могут не подходить и приводить в заблуждения.

Немного теории по этим ссылкам: тут и тут, для тех хочет освежить память.

Случай первый


В настройках операционной системы не указаны пути по умолчанию. Как следствие следующая команда в cron не будет выполнена.

php /var/www/LOGIN/data/www/SITE/cron.php 

Правильной командой будет второй вариант, где мы пропишем полный путь до интерпретатора php.

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php 

Есть ещё несколько способов запуска php скрипта описанных здесь. Интересным будет здесь то, что php скрипт запускается как файл с командами для консоли и тут можно написать целую тучу команд и описать всевозможные варианты на любой вкус. Код выглядит так.

В команде для выполнения в cron прописывается путь к скрипту и только. В скрипте ставятся символы #!, а дальше просто пишем нужные нам команды на языке bash.

Случай второй


Выполнение скрипта при запросе из браузера приводит к выводу страницы в браузер. А при выполнении скрипта через cron приводит к выводу текста страницы в командную строку. Тут может быть несколько вариантов. Система может быть настроена на сохранение результатов вывода в консоль в виде файла. Причем файл этот может размешаться не в самом типичном месте. Постепенно это может забить всё пространство на диске. Часто под сайт дают место в 1 Гигабайт, 500 мегабайт. И даже встречались хостинги с 50 и 10 мегабайт под сайт.

Как вариант, вывод может быть перенаправлен на почтовый ящик, который заботливый хостер ненавязчиво подарил вам и прописал в настройках хостинга как email по умолчанию. При каждом выполнении скрипта весь текст, выводящийся в консоль, будет оформлен в письмо. Проблемы могут начаться неожиданно. Если задание cron выполняется часто, а у почты хостинга прописано ограничение на количество писем в день, почта просто ляжет (заблокируется провайдером как потенциальный спамер). И как неприятные последствия вы получите отказ в регистрации пользователей, уведомление пользователей и д.р., что подвязано на почту.

Читайте также:  Вертикальное меню html css javascript

Решение старо как мир. Нужно сделать перенаправление вывода из консоли в пустоту. Делается это добавлением команды в конце команды крона.

Иногда админы хостинга берут на себя обязанность ненавязчиво поставить их за пользователя. Тут тоже может быть подводный камень.

Случай третий


Ситуация проста. Нужно отладить скрипт, запускаемый планировщиком. Можно попытаться сделать это средствами php, заставлять скрипт писать логии и т.п. Но есть способ куда проще, нужно перенаправить вывод в файл. Команда проста, дополнительный параметр к нашей команде:

> /var/www/LOGIN/data/www/SITE/log.html 

Её надо добавить в конце команды:

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php > /var/www/LOGIN/data/www/SITE/log.html 

Знак «>» указывает системе о перенаправлении вывода. Далее имя файла. В нашем случае указан абсолютный путь. Этот пример не составляет труда найти в интернете. Но тут нас может поджидать неприятность, вытекающая из второго случая. Заботливый хостер автоматически добавляет перенаправление вывода в конце нашей строки. И иногда маскирует это. В итоге получается команда вида:

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php > /var/www/LOGIN/data/www/SITE/log.html >/dev/null 2>&1 

В итоге вывод снова перенаправлен в пустоту и выходной файл будет пуст. Тут хостеру можно указать на его ошибку, что он уж слишком перехитрил с настройками. А можно сразу воспользоваться костылём. После команды перенаправления в файл закончить команду символами &&. Эти два символа используются в командной строке для объединения нескольких команд в одной строке. Они дают командной строке понять, что команда окончена и дальше идет следующая команда. К ней и применяется перенаправление в пустоту. В итоге и перенаправление в пустоту осталось и лог файл записан верно. Пример команды:

/usr/bin/php /var/www/LOGIN/data/www/SITE/cron.php > /var/www/LOGIN/data/www/SITE/log.html && >/dev/null 2>&1 
Случай четвёртый


Скрипт запустился, но работает не верно. Причиной тому — интерпретатор php при запуске из командной строки начинает работать в неправильно настроенном окружении, отличным от того, которое было бы при запуске через HTTP-сервер. Первый признак – скрипт не находит файлы, которые лежат с ним в одной директории, а начинает считать себя расположенным в корневой директории пользователя, которая на несколько папок выше чем корень сайта. Первое, что нужно проверить – переменное окружение и супер глобальный массив $_SERVER.

Первое, что находишь в интернете по этой проблеме – совет прописать в кроне команду смены директории:

cd /var/www/LOGIN/data/www/SITE/ 

Но в каких-то случаях это не помогает. Выход есть. Один из них взять всё в свои руки и задать недостающее окружение для работы скрипта. Информации про это в интернете уже больше.

Иногда просто хватает вписать следующий код в начале скрипта и пути снова становятся рабочими.

$path_parts = pathinfo($_SERVER['SCRIPT_FILENAME']); // определяем директорию скрипта chdir($path_parts['dirname']); // задаем директорию выполнение скрипта 

Как видите, всё прописано функциями и утруждаться настройками не надо.

Заключение


На этом всё. Проблемы и решения не тривиальны и вообще такое сочетание неудачных настроек встречается редко. Удачи вам при развертывании своих проектов и при переездах.

Читайте также:  Html менять цвет изображения

Источник

Настройка и запуск cron на веб-сервере

Cron — это программное обеспечение для настройки автоматического выполнения заданий (скриптов) в Unix/Linux подобных системах: Centos, Debian, Ubuntu и других. Этот планировщик задач работает аналогично во всех версиях операционных систем.

Добавить скрипт в Cron можно через специальный файл «crontab», содержащий список заданий для выполнения.

Файл crontab

Пример пустого файла crontab

Как задавать время в Cron

Чтобы правильно добавить задание сначала указывается время и периодичность и в конце путь к исполняемому скрипту.

  • минута (0-59);
  • час (0-23);
  • день (1-31);
  • месяц (1-12);
  • день недели (0-6);
  • путь к исполняемому файлу.

Все значения указываются через пробел и при необходимости можно вводить множество значений через запятую.

Настройка и запуск cron на веб-хостинге

Пример

Строка следующего вида подразумевает выполнение команды каждый день в 7 утра и 7 вечера:

0 7,19 * * * home/user1/script.sh

Настройка Cron в ISPmanager

Настроить Cron на хостинге проще всего через панель управления. Для примера разберем как производится настройка планировщика в ISPmanager 4.

Настройка Cron в ISPmanager

  1. Открываем панель управления ISPmanager и переходим в «Планировщик» в разделе «Главное». Далее создаем новое задание, нажимая на кнопку «Создать».
  2. Заполняем поля в открывшемся редакторе и нажимаем «ОK»:
  • Команда здесь указываем полный путь (директорию) к исполняемому файлу программы или готовому рабочему скрипту.
  • Описание по желанию можно добавить краткое описание выполняемого задания.
  • Расписание— добавляем расписание с возможностью выбора режима. Режим «Базовый» — с выбором доступных вариантов и «Экспертный» — самостоятельная настройка.

Настройка Cron в ISPmanager

  1. Eсли есть возможность, нужно настроить получение отчетов по запуску заданий на почтовый адрес пользователя. Для этого открываем «Планировщик» → «Настройки» → «Адрес e-mail» и указываем адрес почты для получения. После чего нужно убедиться, что в настройках не стоит галочка напротив «Не отправлять отчет по e-mail».

Настройка Cron в ISPmanager

Настройка Cron для запуска PHP-скрипта

В некоторых случаях бывает так, что автоматическое выполнение PHP-скрипта невозможно. Чаще всего подобные ошибки случаются при запуске PHP-скрипта через локальный интерпретатор. В таких случаях требуется запустить Cron вручную, для чего лучше всего использовать программу wget. В приведенном ниже примере «example.com» нужно заменить на реальный путь к вашему PHP-файлу.

0 7,19 * * * /usr/bin/wget -O - -q -t 1 ‘http://example.com/file.php’

Полезные примеры

Разберем уже приведенный выше пример, немного изменив параметры:

0 7,19 3* 7 /usr/bin/wget -O - -q -t 1/ / ‘http://example.com/file.php’ /dev/null/2>&1

Запуск PHP-скрипта будет происходить в 7:00 и 19:00 каждого воскресенья и 3 числа каждого месяца (совпадения дня недели и числа не имеют значения).

/dev/null/2>&1 — эта команда Cron добавляется в конце сценария (строки), для выполнения скрипта в фоновом режиме без уведомлений.

Помимо этого, можно добавлять другие полезные опции в конце строки планировщика Cron. Как например, для отладки запускаемого скрипта, нужен лог-файл выполнений.

То есть, если мы хотим настроить вывод результатов запуска задания Cron в определенный файл, можно изменить команду следующим образом:

0 7,19 3* 7 /usr/bin/wget -O - -q -t 1 ‘http://example.com/file.php’ > /yourdirectory/log.txt

Просмотрев такой лог, можно понять причину, почему Cron не выполняет скрипт.

Надежный хостинг для сайта. 14 дней — бесплатно!

Источник

Оцените статью