Главная
Блог
Планировщик Cron: чем полезен и как использовать в веб-разработке
19 апреля 2022
5 минут
Дмитрий Древко
Дмитрий Древко
Веб-разработчик
Планировщик Cron: чем полезен и как использовать в веб-разработке

Планировщик Cron: чем полезен и как использовать в веб-разработке

Что такое Cron и как им пользоваться

Cron — программа-демон в операционных системах семейства UNIX. Она умеет выполнять задания на сервере с заданной периодичностью. Благодаря Сron веб-разработчик может упростить себе работу и автоматизировать почти любые задачи: от стандартного бэкапирования до более сложных. Я с помощью Сron проверял и убирал битые ссылки на сайте радиостанций. Немного расскажу об этом опыте, а прежде — о том, как настроить Сron вручную через консоль или в панели ispmanager, если вы не хотите хлопот с командной строкой.

Содержание

Настройка Сron вручную

Настройка Сron в ispmanager 

Как я наладил работу сайта радиостанций с Cron

Cron в различных CMS

Подводные камни Cron

Настройка Cron вручную в консоли

Расписание работы Cron задаётся инструкциями в файлах crontab. В них указано, какие команды и в какое время должен выполнить сервер.

Сrontab-файлы создаются для каждого пользователя индивидуально в каталоге /var/spool/cron/crontabs/"". Подробное описание crontab есть в официальной документации, а я расскажу об основных командах.

Чтобы внести в crontabs информацию, используется команда crontab -e. Она открывает содержимое crontab-файла для редактирования. Выполнение этой команды не прерывает работу Сron — все процессы, записанные в открытом crontab, будут выполняться по расписанию.

Основные команды для работы с Cron:

  • crontab -l выводит на экран содержимое текущего файла расписания активного пользователя — того, кто в данный момент авторизован в системе;
  • crontab -r удаляет текущий файл расписания;
  • crontab – e выводит на экран содержимого текущего файла расписания для редактирования.

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

Структура одной строки crontab-файла выглядит следующим образом:

Структура одной строки crontab-файла

В каждой строке шесть параметров, разделяемых пробелами.

В первых пяти параметрах задаётся время выполнения команды или сценария: минута, час, день, месяц, день недели. Допускается ввод этих значений в виде:

  • числа;
  • списка чисел, разделённых запятыми;
  • диапазона чисел, разделённого дефисом;
  • символы * или /. Знак * означает, что задание выполняться каждый раз в указанный период. Например, такое задание: * * * * * [команда для выполнения] будет выполняться каждую минуту. Чтобы настроить периодичность, например, каждые десять минут, нужно добавить к этой записи знак / и указать число: */10 * * * * [команда для выполнения] — запуск задания каждые 10 минут.

Время и дата для выполнения берётся относительно времени и даты, установленными на сервере, где выполняется задание Cron.

Шестым параметром задаётся команда для выполнения.

Для ручного создания команд Cron существуют сервисы crontab-генераторов. Они упрощают жизнь начинающим пользователям:

  • crontab.guru — хороший ресурс для тех, кто ещё мало знаком с планировщиком. Здесь можно изучать синтаксис команд и примеры cron-задач.
  • crontab-generator.org— генератор команд. Достаточно ввести нужные данные в форму, и сайт сгенерирует команду для планировщика. Её можно вставить в crontab-файл, открыв её командной crontab -e, либо сохранить в файл или вообще отправить на e-mail.

Если же вы пользуетесь ispmanager, вводить команды в crontab вовсе не нужно — их можно задать через форму прямо в панели. Расскажу об этом способе работы с Cron.

Несколько примеров использования Cron в ispmanager

Ispmanager — панель для управления веб-серверами и сайтами. В неё уже включен инструмент для работы с Cron. Чтобы запланировать задачи на сервере, не нужно открывать терминал — управление происходит через формы и кнопки в панели.

Пример стандартного содержимого файла crontab пользователя root в ispmanager:


[[php]]
## ispmanager acme.sh certs update task
48 3 * * *  	/usr/local/mgr5/sbin/cron-core sbin/mgrctl -m core [[/php]]

В первой строке указано описание задачи: ## ispmanager acme.sh certs update task.

Во второй строке указано, что каждый день в 3 часа 48 минут команда /usr/local/mgr5/sbin/cron-core sbin/mgrctl будет выполнена с параметрами -m core acmesh.certs.update. Надпись >/dev/null 2>&1 означает, что отчёт о выполнении команды не будет отправлен на почту пользователя.

Команда выполняется каждые 5 минут:


[[php]]
## ispmanager task which collect system statistics
*/5 * * * * /usr/local/mgr5/sbin/cron-core sbin/mgrctl -m core sysinfostat >/dev/null 2>&1[[/php]]

Чтобы не прописывать в crontab-файле все эти команды вручную, можно зайти в ispmanager в раздел Планировщик и отредактировать уже существующее задание, либо создать новое:

Так выглядит раздел со всеми созданными задачами планировщика

Как я наладил работу сайта радиостанций с Cron

Мне довелось использовать Cron для автоматизации проверки доступности многих интернет-ресурсов.

Работая в веб-студии, мы разрабатывали сайт-агрегатор радиостанций. Сайт представлял из себя набор ссылок на потоковые аудио вещающих интернет-радиостанций.

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

Чтобы избавиться от ручной проверки порядка семи сотен ссылок, я использовал Cron. Написал скрипт на PHP, который проверял доступность ссылок на аудиопотоки, и запускал его каждые два часа. Команда выглядела так:


[[php]]
* */2 * * * php check-radios.php >/dev/null 2>&1[[/php]]

Я добавил её в Сron через установленный ispmanager. В типе выполнения задания выбрал Экспертный режим — в нём можно задавать не только конкретное время, день, день недели и месяц, но и периодичность:

Интерфейс создания и редактирования задания в планировщике Cron в панели ispmanager 

После этого созданная задача появилась в разделе Планировщик со всеми заданными параметрами:

Только что созданная с помощью ispmanager задача в планировщике

Использование Cron в различных CMS

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

Подводные камни Cron и неприятные моменты

Бывают случаи, когда Cron может подвести и не отработать вовремя.

Например, на сервере настроено задание, которое по расписанию раз в день запускает сбор данных для последующей обработки. Данные очень важны. Но если на сервере что-то произошло в то время, когда задание должно было выполниться — не ответила нужная база данных, сервер перезагружался либо просто не работал из-за обычного сбоя электричества, — то Cron бессилен. Он не сможет отработать и пропустит запуск процесса. Это стоит учитывать: после сбоев задания нужно выполнить вручную или ждать следующего запуска по расписанию.

Ispmanager для управления сайтами и веб-серверами

Ispmanager помогает создавать и администрировать сайты: настраивать среду разработки, автоматизировать DevOps — задачи, делать бэкапы, устанавливать версии PHP, пакеты языков программирования, многое другое. Попробуйте бесплатную версию ispmanager на 14 дней.

Узнать больше об ispmanager

Подписка на новости
Подпишитесь на новостную рассылку ispmanager и получайте самые лучшие материалы каждую неделю