Раздел помощи SpaceWeb

Планировщик задач Cron

12 ноя, 2024

В статье мы расскажем о планировщике задач Cron и о том, как настроить Cron-задание на хостинге.

Что такое Cron

Cron (Command Run ON) — это программа-планировщик в UNIX-подобных системах. Она позволяет запланировать задачу и выполнить ее в определенное время. Весь функционал планировщика хранится в директории Crontab — в ней находятся файлы конфигурации, которые регулируют работу Cron.

Чаще всего Cron используется в ОС семейства Linux: он помогает автоматизировать некоторые действия на хостинге и повторять их с определенной периодичностью. Это может быть:

  • создание резервной копии сайта,
  • выкладка нового функционала,
  • отправка почты через форму обратной связи и т. д.

Помимо стандартного функционала, через Cron можно настроить запуск собственного PHP-скрипта. Для этого нужно создать файл с вашим скриптом и загрузить его на хостинг. После этого в настройках Cron-задания необходимо указать путь к файлу.

Какой синтаксис имеет выражение Cron

Задача, которая создана в Cron, имеет следующий формат:

[время_запуска_скрипта] [команда_или_путь_к_скрипту]

Вы можете настроить выполнение задач по расписанию. Для этого используется несколько параметров:

Параметр Значение Описание
Минуты от 0 до 59 Команда выполняется в указанную минуту
Часы от 0 до 23 Команда запускается в указанный час
Дни от 1 до 31 Команда выполняется в указанный день месяца
Месяцы от 1 до 12

Команда выполняется в указанном месяце, где:
1 — январь,
2 — февраль,
3 — март,
4 — апрель,
5 — май,
6 — июнь,
7 — июль,
8 — август,
9 — сентябрь,
10 — октябрь,
11 — ноябрь,
12 — декабрь

Дни недели от 0 до 7 Задание выполняется в указанный день недели, где:
0 — воскресенье,
1 — понедельник,
2 — вторник,
3 — среда,
4 — четверг,
5 — пятница,
6 — суббота,
7 — воскресенье.

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

  • Минуты — команда будет выполняться ежеминутно,
  • Часы — задание в разделе Crontab будет исполняться каждый час,
  • Дни — задание будет выполняться каждый день месяца,
  • Месяцы — задание будет выполняться ежемесячно,
  • Дни недели — команда будет исполняться ежедневно.

В качестве примера разберем следующую команду:

0 9 * * 1 /usr/bin/php /home/l/login/public_html/script.php

Эта запись значит, что задание из файла для Crontab будет исполняться каждый понедельник в 9 часов утра.
Если вы хотите указать несколько значений для одного параметра, между ними можно поставить запятую или дефис. Например:

0 9,18 * * 1-5 /usr/bin/php /home/l/login/public_html/script.php

Эта запись означает, что пользовательский скрипт будет исполняться в 9:00 и в 18:00 с понедельника по пятницу включительно.

Как формируется абсолютный путь до корневой папки аккаунта

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

/home/u/username

Где:

  •  /home — домашняя папка сервера.
  •  /u — первая буква логина аккаунта
  •  /username — логин аккаунта.

Обратите внимание: Linux-хостинг чувствителен к регистру. Если вам нужно использовать название файла с исполняемым скриптом, его нужно вводить в точном соответствии с регистром названия. 
Например, если исполняемый файл называется SCRIPT.PHP, то путь к нему должен иметь следующий вид:

/home/u/username/SCRIPT.PHP

Как узнать путь до исполняемой программы

Для создания задания потребуется путь до исполняемой программы. Чтобы узнать его:

  1. Подключитесь к хостингу по SSH.
  2. Выполните команду:
which perl 

Вместо perl укажите название программы, которая должна выполняться в рамках задания.
В выводе этой команды отобразится путь:

/usr/bin/perl

Готово, вы узнали до исполняемой программы.

 Для PHP путь к команде зависит от необходимой для запуска скрипта версии языка. По умолчанию команда /usr/bin/php запускает версию PHP 5.2. Если необходимый скрипт рассчитан на работу с другой версией, во избежание ошибок выполнения необходимо добавить к пути к команде необходимую версию следующим образом:

/usr/bin/php<номер>

Поддерживаемые версии PHP на хостинге: 5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1

Например, для версии PHP 7.4 путь будет следующим:

/usr/bin/php7.4

Как добавить задание в Cron

  1. Перейдите в панель управления.
  2. Разверните блок Инструменты и выберите Crontab:

  1. Нажмите Добавить задание:

  1. Заполните поля:
  • Минута — укажите минуты в диапазоне от 0 до 59,
  • Час — укажите час в диапазоне от 0 до 23,
  • День — укажите число месяца в диапазоне от 1 до 31,
  • Месяц — укажите месяц в формате от 1 до 12,
  • День недели — укажите день недели в диапазоне от 0 до 7,
  • Команда — добавьте команду, которую нужно выполнить.

Затем кликните Добавить:

После этого программный код будет запускаться в заданное время.
Готово, вы добавили задание в разделе Кронтаб.

Как подписаться на уведомления

Если вам необходимы уведомления о выполнении Cron-заданий, их можно получать на электронную почту. Чтобы настроить пересылку:

  1. Перейдите в раздел Crontab.
  2. Укажите электронную почту и нажмите Сохранить:

Письма будут отправляться в том случае, если в результате выполнения задания формируется какой-либо текстовый вывод, само письмо будет содержать вывод команды.

Если вам нужно отключить уведомление для одного из заданий, в конце команды можно дописать следующую последовательность символов, отключающую вывод текста при её выполнении:

> /dev/null 2>&1

Например, для команды /usr/bin/php7.4 /home/l/login/script.php:

/usr/bin/php7.4 /home/l/login/script.php > /dev/null 2>&1