Что такое CRON и как его использовать

Что такое CRON и как его использовать

01.02.2022
Автор: HostZealot Team
2 мін.
762

Cron – один из самых популярных демонов на Linux, который по сути представляет собой продвинутый планировщик задач. Является важным компонентом всех Linux-подобных систем и применяется администраторами для планировки расписания запуска определенных программ и скриптов в заданное время. Администратор может устанавливать периодичность запуска скриптов, регулировать продолжительность их работы и т.д. В этой статье мы постараемся максимально подробно рассказать о принципах использования cron через панель управления и SSH-протокол, поделимся советами по первичной настройке программы и проведем небольшой экскурс по синтаксису cron.

Cron и crontab: что это

Два фундаментальных компонента, принципы работы которых необходимо понимать любому администратору VPS/VDS. Если сказать проще, то:

  1. Cron – это планировщик задач. С его помощью вы можете настроить запуск определенных скриптов с заданными интервалами. Например, вы можете каждый день в 8 часов вечера собирать статические данные с сервера, или формировать логи, или делать бэкапы, или настроить проверку обновлений для системы. В общем, полезная штука, с каких сторон бы не посмотреть.
  2. Crontab – это таблица, где записано расписание запуска скриптов и программного обеспечения. Она имеет специальный формат, который поддерживается демоном и считывается сервером.

На каждую учетную запись приходится своя таблица crontab, поэтому для всех пользователей можно настроить свое расписание и установить какие-то специфические задачи.

Принцип использования Cron

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

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

Богатый синтаксис демона позволяет настроить любую периодичность заданий, начиная с часа и заканчивая выполнением раз в году. Умение грамотно использовать Cron важно, поскольку снижает необходимость вмешательства в работу сервера со стороны администратора. По сути, работу VPS/VDS можно полностью автоматизировать, а когда под управлением специалиста находится сразу несколько десятков серверов, то умение правильно настроить планировщик задач – жизненно необходимая вещь.

Принцип работы Cron и crontab через панель управления

У многих хостинг-провайдеров есть собственная панель управления, в которой разработчики предусмотрели возможность более удобной настройки планировщика задач через графический интерфейс. Например, такой планировщик есть в ISPmanager, и для формирования задач достаточно перейти в раздел «Планировщик CRON», расположенный в меню слева, и нажать на «Создать».

В появившемся окне потребуется ввести:

  1. Адрес e-mail. Сюда вписываем почтовый адрес, на который будут приходить уведомления о статусе выполнения заданий. Можно оставить пустым, если в этом нет необходимости.
  2. Команду – сюда вписываем путь к программе, которую ставим на выполнение. Если планируете запускать php-скрипт, прописываем также путь к интерпретатору. Например, так: /usr/bin/php7.0 /var/www/new_user/data/www/mysite/script.php.
  3. Расписание – настраивается в базовом или в экспертном режиме, здесь вы задаете периодичность выполнения задач.
  4. Описание – просто комментарий, позволяющий более удобно ориентироваться в планировщике. Если заданий много, то очень полезная вещь, не пренебрегайте.

Как видите, ничего сложно, и настройка задач cron через панель управления ISPmanager делается элементарно. То же самое можно сказать и большинстве других панелей управления, таких как cPanel, VirtualMin, DirectAdmin и т.д.

Что такое cron и как его использовать

Принцип работы Cron и crontab через SSH-протокол

Бывает и такое, что настраивать планировщик через панель управления не представляется возможным, или неудобно, или просто не интересно. Но опытный администратор легко всё может настроить и по старинке, через командную строку. Для этого нам сперва потребуется подключиться к серверу через протокол SSH.

Рассмотрим 5 ключевых параметров команд Crontab:

  • crontab -e – для редактирования или создания файлов расписания под текущую учетную запись;
  • crontab -l – отображение содержания таблицы с расписанием в текущей учетной записи;
  • crontab -r – очистка файла с расписанием;
  • сrontab -v – показ даты, когда конфиг открывался в последний раз;
  • crontab -u user – работа с расписаниями отдельных пользователей.

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

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

Первичная настройка Cron

Выше мы уже писали, что таблицы с расписанием у каждого пользователя свои, индивидуальные, но по умолчанию они не существуют, и их нужно создать. Команда crontab -e позволяет сгенерировать таблицу, которая появится в директории /var/spool/cron. Файл будет абсолютно пустой, так что параметры придется заполнять вручную, применяя знания о синтаксисте cron. Давайте немного познакомимся с синтаксисом демона:

# crontab -e
SHELL=/bin/bash
MAILTO=вашапочта@домен.com
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
 
# Детали представим далее
 
# Пример постановки задачи через планировщик:
# .---------------- минуты (0 - 59)
# |  .------------- часы (0 - 23)
# |  |  .---------- дни месяца (1 - 31)
# |  |  |  .------- сами месяцы (1 - 12) OR may,jun,sept,aug ...
# |  |  |  |  .---- дни недели (0 - 6) (0 или 7 будет означать воскресенье, зависит от параметров системы) позволяется использовать сокращения в духе mon,tue,wed,thu,fri,sat,sun
# |  |  |  |  |
# *  *  *  *  * имя пользователя  команда, которую необходимо запланировать
 
# создание бекапа всей ОС с помощью кастомного скрипта
01 01 * * * /usr/local/bin/bckp -vbd1 ; /usr/local/bin/bckp -vbd2
 
# чтобы установить соответствие времени между ОС и «железом», используется следующий синтаксис:
03 05 * * * /sbin/hwclock –systohc
 
# а вот так можно запланировать обновления ОС:

25 04 1 * * /usr/bin/apt-get update

Для первичной настройки важнейшими являются первые три строчки. Здесь мы указываем оболочку для Cron, адрес электронной почты для получения уведомлений, а также путь к окружению. Синтаксис демона включает формат времени и команду, которую должен выполнить планировщик в определенный момент времени.

Для наглядности приведем несколько примеров использования скриптов с помощью планировщика. Вот так можно задать выполнение скрипта каждый вторник в 10:00 и в 19:00 часов:

2 10,19 * * 1 /home/evgen/script.sh

А вот так устанавливается ежедневный сценарий в 0:30 и 12:30:

30 */12 * * * script.sh

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

* * * * * /scripts/script.sh; /scripts/scrit2.sh

Ну и напоследок предлагаем пример скрипта, который будет запускать поиск обновлений для системы и ПО через пакетный менеджер apt ежемесячно, первого числа в 4 утра:

00 04 1 * * /usr/bin/apt-get update

Если хотите изучить тонкости применения демона более глубоко, рекомендуем изучить документацию на официальных энциклопедиях по администрированию Linux.

Установка ограничений у Cron

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

  • /etc/cron.allow – здесь содержатся данные об учетных записях пользователей, которые могут планировать задачи;
  • /etc/cron.deny – а здесь перечислены те пользователи, которым не разрешается работать с планировщиком.

Записи в обеих файлах нужно вести так: одно имя пользователя в каждой строке без пробелов. Это так называемые файлы контроля доступа, и они будут считываться каждый раз, когда пользователь попытается работать с планировщиком. Если имя учетной записи указано одновременно в обеих файлах, то файл /etc/cron.deny будет игнорироваться. Если же оба эти файла не существуют, то на сервере не будет никаких ограничений, связанных с планировщиком.

Дополнительные сведения

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

Во-вторых, многие не знают, как добавить в планировщик на выполнение скрипт PHP. Давайте посмотрим на примере скрипта с таким путем: /var/www/user/data/www/вашдомен.com/script.php. Вот так его можно передать интерпретатору:

/usr/bin/php /var/www/user/data/www/вашдомен.com/script.php

А вот так можно вызвать скрипт через wget:

/usr/bin/wget вашдомен.com/script.php

Если остались какие-то вопросы, можете поинтересоваться у наших специалистов по контактным номерам телефонов или через Livechat. Спасибо за внимание!

# Як зробити Поділитися:
Статті за темою