Поддержка абонентов: support@thehost.ua
Ваши отзывы и предложения: #feedback

3.13. CRON – Запуск скрипта по расписанию

Вызвать запуск нужного вам скрипта с помощью планировщика CRON можно двумя способами: c помощью эмуляции загрузки определённого URL вашего сайта, что приводит к запуску нужного вам скрипта и с помощью прямого запуска скрипта без обращений к веб-сервисам по протоколу HTTP/HTTPS.


Способ №1 - Эмуляция загрузки URL сайта

Данный способ максимально прост и приводит к запуску скрипта в среде обычной работы сайта на хостинге. Существенным плюсом этого метода является возможность передачи нужному скрипту дополнительных GET параметров, в которых могут храниться ключи запуска, идентификаторы, токены и т.д. Минусом этого метода является то, что обращение к скрипту выполняется с помощью HTTP запроса к веб-сервису, что накладывает дополнительное ограничение на время выполнения запроса.

Как добавить задание в планировщик CRON, ISP

В панели управления ISPManager в разделе "Инструменты" - "Планировщик (cron)" добавьте задание в формате:

wget -O /dev/null "http://ваш_домен/ваш_скрипт?param1=data&param2=data"

Важно использовать двойные кавычки для URL вашего CRON скрипта, т.к. в противном случае не будут переданы все параметры HTTP GET запросов.


Пример CRON задания, при работе сайта по протоколу HTTP

В данном примере скрипт "cron.php" будет вызван с помощью интерпретатора PHP, установленного для сайта "website.com". При этом скрипту будет передан HTTP GET параметр "action" со значением "perform".

wget -O /dev/null "http://website.com/cron/cron.php?action=perform"


Пример CRON задания сайта работающего по протоколу HTTPS

Если ваш сайт использует для работы защищённый протокол HTTPS, тогда крайне рекомендуем использовать параметр wget "--no-check-certificate", отключающий проверку используемого на сайте SSL сертификата.

wget -O /dev/null --no-check-certificate "https://website.com/cron/cron.php?action=perform"



Способ №2 - Прямой запуск скрипта CRON

Описанный способ запускает необходимый вам скрипт с помощью прямого запуска интерпретатора, который исключает какие-либо обращения к веб-сервисам. Сильной стороной этого метода является отсутствие каких-либо прослоек в виде веб-сервисов при выполнении. Минусом является необходимость прямого указания интерпретатора для запуска того или иного скрипта, а для PHP ещё и требует указание версии интерпретатора, например PHP 7.1 или 8.0. К неприятным особенностям данного метода можно отнести и отсутствие возможности передачи POST/GET параметров. Единственное что можно передать − это ENV параметры, о чём будет написано ниже.

Как добавить задание в планировщик CRON, ISP

Для использования данного метода, в панели управления ISPManager в разделе "Инструменты" - "Планировщик (cron)" нужно добавить задание в формате:

php-версия /var/www/ваш_логин/data/www/имя_домена/путь_файлу

Пример CRON задания с прямым вызовом PHP скрипта

В данном примере скрипт "cron.php" будет выполнен с помощью PHP версии 7.4.

php-7.4 /var/www/superuser/data/www/website.com/cron/cron.php


Пример CRON с передачей PHP скрипту ENV параметра

Как ранее описывалось, при таком методе запуска, единственной возможностью передать какой-либо дополнительный параметр будет использование ENV переменных в формате:

ПАРАМЕТР=значение php-версия /var/www/ваш_логин/data/www/имя_домена/путь_файлу


В данном примере скрипту "cron.php" был передан ENV параметр "MODE" со значением "production".
MODE=production php-8.0 /var/www/superuser/data/www/website.com/cron/cron.php



Отображение добавленного CRON задания

После добавления задания планировщика CRON, оно должно отобразится в перечне заданий. Для того, чтобы пользователи не получали большое количество мусорных сообщений, связанных с выполнением CRON, к каждому заданию автоматически будет добавлено " >/dev/null 2>&1 ". Наличие такой конструкции в конце команды является нормальным поведением панели управления хостингом и планировщика CRON.

Список заданий CRON