Гид по настройке CRON-задания на выделенном сервере

Настройка CRON-заданий на выделенном сервере является важным аспектом автоматизации и регулярного выполнения задач на сервера с операционными системами Unix и Unix-подобными системами. 

В этой статье мы рассмотрим основы настройки CRON-заданий на выделенном сервере и предоставим пошаговое руководство по созданию и управлению заданиями CRON

Что такое CRON

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

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

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

Кроме того, CRON предоставляет механизм логирования, который записывает результаты выполнения задач в специальные файлы журналов. Это позволяет отслеживать и анализировать выполнение задач, а также оперативно обнаруживать возможные проблемы.

CRON является мощным инструментом автоматизации, который широко используется системными администраторами и разработчиками для автоматического выполнения регулярных задач, таких как резервное копирование данных, обновление системы, отправка отчётов и многое другое.

Синтаксис CRON-заданий

Синтаксис CRON-заданий состоит из пяти или шести полей, разделённых пробелами или табуляцией. Каждое поле определяет временные интервалы, в которые задание должно быть выполнено. 

Общий синтаксис CRON-заданий выглядит так:

Поле 1

Поле 2

Поле 3

Поле 4

Поле 5

Поле 6 

команда

*

*

*

*

*

*

Минуты

Часы

Дни

Месяцы

Дни недели

Имя пользователя

Важно! «*» – это любое значение, допустимое в выбранном поле.

Поля задаются следующим образом:

  • Минуты

Допустимые значения: 0-59.

Символ «*» в поле минуты означает запрос – «каждую минуту».

Можно указывать конкретные значения, разделяя их запятыми. Например, «5,10,15» означает «в 5, 10 и 15 минут».

  • Часы 

Допустимые значения: 0-23.

Символ «*» в поле часа означает «каждый час».

Можно указывать конкретные значения, разделяя их запятыми. Например, «1,8,20» означает «в 1, 8 и 20 часов».

  • Дни месяца 

Возможные значения: 1-31.

Символ «*» в поле дня месяца означает «каждый день».

Можно указывать конкретные значения, разделяя их запятыми. Например, «5,15,25» означает «в 5, 15 и 25 числах месяца».

  • Месяцы

Возможные значения: 1-12 

Символ «*» в поле месяца означает «каждый месяц».

Можно указывать конкретные значения, разделяя их запятыми. Например, «1,6,12» означает «в январе, июне и декабре».

  • Дни недели 

Возможные значения: 0-7 

Символ «*» в поле дня недели означает «каждый день недели».

Можно указывать конкретные значения, разделяя их запятыми. Например, «1,3,5» означает «в понедельник, среду и пятницу».

  • Пользователь

Позволяет указать пользователя, от имени которого должна быть выполнена команда. Однако это поле опционально и может быть опущено. 

Некоторые дополнительные возможности синтаксиса CRON-заданий включают использование символов «/», «-», «,» и «%».

Символ

Значение

Пример использования

/

Позволяет задать цикличность временного интервала.

*/5 – каждые 5 минут.

-

Позволяет задать диапазон значений.

1-5 – в поле часов подразумевает выполнение команды или скрипта с 1 до 5 часов.

,

Позволяет перечислить несколько значений.

1,3,5 – в поле дней недели инициирует выполнение команды или скрипта в понедельник, среду и пятницу.

%

Позволяет задать случайное значение для временного интервала

*/%5 – в поле минут означает выполнение команды или скрипта каждые случайные 5 минут.

Это основные элементы синтаксиса CRON-заданий. Используя их комбинацию, вы можете точно определить расписание выполнения задач согласно вашим требованиям.

Важно! Не оставляйте ни одно из полей пустым. В это правило не входит поле 6. 

Общие примеры:

- «* * * * * команда» – выполнять заданную команду или скрипт каждую минуту.

- «0 8 * * * команда» – выполнять заданную команду или скрипт каждый день в 8:00 утра.

- «0 0 1,15 * * команда» – выполнять заданную команду или скрипт каждое 1-е и 15-е число месяца в полночь.

- «0 12 * * 1-5 команда» – выполнять заданную команду или скрипт каждый будний день (с понедельника по пятницу) в 12:00.

Важно! Убедитесь, что правильно указываете команду или путь к скрипту в поле. Так вы гарантируете себе их правильное выполнение в контексте CRON-задания.

Примеры CRON-заданий на сервере без панели управления

Вот несколько примеров команд, которые можно использовать при настройке CRON-заданий:

Пример

Значение

* * * * * /usr/local/my_command

Задача «/usr/local/my_command» будет выполняться каждую минуту.

30 8 * * * /usr/local/my_script.sh

Задание будет выполняться каждый день в 8:30 утра.

*/15 * * * * /usr/local/my_command

Задача «/usr/local/my_command» будет выполняться каждые 15 минут.

0 * * * * /usr/local/my_command

Задание будет выполняться каждый час, в начале каждого часа.

0 2 * * * /usr/local/my_command

«/usr/local/my_command» будет выполняться каждую ночь в 2 часа.

0 10 * * 6 /usr/local/my_command

Задание будет выполняться каждую субботу в 10 часов утра.

0 12 1 * * /usr/local/my_command

«/usr/local/my_command» будет выполняться каждый месяц первого числа в 12 часов дня.

0 0 1 * * /usr/local/my_script.sh

Задача «/usr/local/my_script.sh» будет запускаться первого числа каждого месяца в полночь.

0 9 * * 1-5 /usr/local/my_command

Задача «/usr/local/my_command» будет выполняться каждый будний день в 9:00 утра.

0 * * * 1 /usr/local/my_script.sh

Задание будет запускаться каждый час по понедельникам.

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

Примеры CRON-заданий на сервере с панелью управления ispmanager

Если у вас установлен сервер с панелью управления ispmanager, вы можете воспользоваться ей для настройки CRON-заданий. 

Для этого следуйте дальнейшим инструкциям:

  1. Откройте панель управление ispmanager.
  2. В левом меню выберите раздел Планировщик CRON.

  1. Щёлкните по опции Создать задание.

  1. Заполните форму нового задания. В базовом режиме вам необходимо заполнить поля:
  • «Команда» – пропишите команду;
  • «Выполнять» – выберите, как часто ей необходимо выполняться;
  • «Выполнить в …часов» – задайте время в часах, во сколько она должна выполняться;
  • «Выполнить в…минут» – задайте минуты, в которые она должна выполняться

При необходимости вы можете пропустить поле/поля, которые вам неинтересны. 

  1. Сохраните изменения кнопкой Создать.  

Готово! Вы настроили CRON-задание. 

Возможные ошибки в CRON-заданиях и пути решения

Любой, кто использовал CRON для планирования задач в Linux, знает, что диагностика и устранение связанных с ним ошибок может быть довольно сложной задачей. Ошибки при запуске планировщика и невыполнение заданий – это всё то, с чем вы можете столкнуться, даже полностью следуя инструкциям. 

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

Ошибки расписания

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

Даже один символ может иметь огромное значение в функциональности прописанного задания. Например, замена символа «-» на «/» в приведённом ниже выражении кардинально меняет его работу.

Вариант 1: 0-10 14 * * команда

Вариант 2: 0/10 14 * * команда

В первом случае CRON-задание запускается каждую минуту с 14:00 до 14:10 каждый день. Во втором – каждые 10 минут каждый день с 14:00 в 14:50.

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

  • Вы можете найти задание, набрав crontab -l, чтобы отобразить таблицу CRON текущего пользователя. 
  • Или воспользуйтесь панелью управления ispmanager, где в разделе Планировщик CRON, найдите проблемное задание.  
  • Если вы так и не смогли найти нужное CRON-задание, вам следует проверить разрешения на доступ. Возможно, другой пользователь создал задание, и у вас просто нет прав на его выполнение. 

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

Несовместимость сред

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

Важно! Переменная PATH содержит список директорий, в которых операционная система ищет исполняемые файлы, когда вы вводите команду в командной строке без указания полного пути к файлу. Она является одним из механизмов поиска исполняемых файлов в системе.

В CRON-планировщике PATH по умолчанию установлен в /bin:/usr/bin. Кроме того, только /usr/bin или /bin будут искать исполняемые файлы.

По умолчанию задания CRON выполняются из домашнего каталога пользователя. Это означает, что, если вы используете иные директории (например /documents/script.sh), CRON не будет знать, где искать файл.

Если вы действительно хотите использовать файл из места, отличного от вашего домашнего каталога, вы должны использовать абсолютный путь. Абсолютные пути включают полный путь к файлу. 

Например:

1 * * * * /путь/к/скрипту.sh

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

PATH=/bin:/usr/bin:/путь/к/скрипту.sh 

1 * * * * команда

Нехватка ресурсов 

Задания CRON могут завершиться ошибкой из-за исчерпания определённых ресурсов. Например, из-за нехватки свободного места на диске. 

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

Например, вы можете использовать команду df, которая показывает доступное и используемое дисковое пространство в Linux. 

Ниже вы можете ознакомиться с некоторыми способами использования команды df:

  • df -h – выводит размер доступного дискового пространства в удобном формате;
  • df -a – отображает все файловые системы;
  • df -t – запрашивает информацию только об указанных файловых системах.

CRON-задание не выполняется

Если CRON-задание не выполняется вообще, убедитесь, что служба CRON запущена и работает на вашем сервере. 

Проверьте системные журналы или логи CRON для обнаружения возможных ошибок или проблем.

Заключение

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

Процесс настройки CRON может показаться сложным для начинающих, но наше руководство и понимание основных концепций помогут вам успешно осуществить эту задачу.

Всё ещё остались вопросы?