Рубрика: Apache »

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

Задания Cron

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:

команда >/dev/null 2>&1

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

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

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

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

В cPanel добавить задание довольно просто. Войдите в "Дополнительно", "Задания Cron" и заполните форму добавления задания. Но имейте в виду, что выполнение php-скрипта имеет свои особенности.

Выполнение 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
Опубликовано в рубрике Apache | с метками , . |

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

  1. Alexsander говорит:

    А как подавить отсылку на емайл сообщений крона?

  2. MBlogM говорит:

    команда >/dev/null 2>&1

  3. HotIce говорит:

    Доброго времени.
    У вас отличный блог, странно, почему я на него раньше не попадал.
    Столкнулся, не в первый раз уже, с работой cron в вордпресс.
    В свое время, вырубил его функционал в wp-config, потому что при обращении к wp-cron.php с хостинга возвращает 404.
    Покурив интернет, выяснил, что это происходит когда в hosts на хостинге прописано 127.0.0.1 localhost, а wordpress-у нужно, в данном случае, чтоб был прописан адрес моего блога. Хостинг виртуальный, провайдер что-либо делать отказался. Ну я отключил. А сейчас решил поставить wp super cache, но сия зверюга натыкаясь на 404 ставиться не хочет.
    Не подскажете, где бы его чего почитать более-менее толковое про этот чертов функционал? Второй раз за месяц по интернету прохожусь с этими вопросами, но такое ощущение, что это или заговор, или я не там ищу.
    Хочу отпинать или вордпресс, чтоб дергался крон сервера хостинга, либо научить кэширующий плагин работать с внешним кроном.
    Благодарю.

  4. Виталий говорит:

    Спасибо пост реально очень помог

  5. coman говорит:

    Скрипты могут не работать из-за указания расширения в названии файла

  6. Галия говорит:

    А можно "для особо одаренных" или, вернее, для вообще ничего не знающих в php подробнее написать, куда вставить строку-php или что там еще.
    Задание в Cron - это логически понятно - выставить время, а вот мне например, надо выставить задание для создания backup сайта. Какую команду и куда ее вписать?

  7. Mj говорит:

    Уууу полегчало, оказывается что так просто 🙂

  8. Константин говорит:

    Описано легко и понятно. Только у Вас получается, что в неделе 8 дней (от 0 до 7)
    Поправьте, плз, а то чайники запутаются... 🙂

    • Admin говорит:

      День недели может быть задан числом от 0 до 7, причем 0 и 7 соответствуют воскресенью.

  9. Олег говорит:

    Здравствуйте, у меня такой вопрос, куда вписывать путь к файлу PHP? хотелось бы по подробнее.

  10. Вася говорит:

    Можно ли отправить резервную копию на e-mail? (именно копию, а не отчёт). Если да, то как?

  11. Сергей говорит:

    Если это статья для новичков, то совершенно не понятно куда писать команды этому крону типа:
    0 0 * * * /usr/bin/php /home/логин/public_html/myscript.php

    • Gloster говорит:

      Просто в консоли вводишь последовательно команды.
      echo "0 0 * * * /usr/bin/php /home/логин/public_html/myscript.php" | crontab
      service cron reload

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *