Планировщик событий Cron в таблице Crontab

Планировщик событий Cron в таблице Crontab

Scheduling Cron Jobs with Crontab

7 Января 2020 | Терминал

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

Планировщик событий Cron в таблице Crontab

Например, вы можете установить задание cron для автоматизации повторяющихся задач, таких как резервное копирование баз данных или данных, обновление системы последними обновлениями безопасности, проверка использования дискового пространства , отправка электронных писем и так далее. В некоторых приложениях, таких как Drupal или Magento , для выполнения определенных задач требуются задания cron.

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


Что такое файл Crontab

Crontab (таблица cron) представляет собой текстовый файл, который определяет расписание заданий cron. Существует два типа файлов crontab. Общесистемные файлы crontab и отдельные пользовательские файлы crontab.

Файлы crontab пользователей хранятся под именем пользователя, и их расположение зависит от операционной системы. В системах на базе Red Hat, таких как CentOS, файлы crontab хранятся в /var/spool/cron каталоге, а в Debian и Ubuntu - в /var/spool/cron/crontabs каталоге.

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

/etc/crontab и файлы внутри /etc/cron.d каталога являются общесистемными файлами crontab, которые могут редактировать только системные администраторы.

В большинстве дистрибутивов Linux вы также можете поместить скрипты в /etc/cron.{hourly,daily,weekly,monthly} каталоги, и скрипты будут выполняться каждый hour/day/week/month.


Синтаксис Crontab и операторы

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

* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

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

  • Оператор звездочки означает любое значение или всегда. Если у вас есть символ звездочки в поле Час, это означает, что задание будет выполняться каждый час.
  • Оператор запятой позволяет указать список значений для повторения. Например, если у вас есть 1,3,5 поле «Час», задание будет выполняться в 1:00, 3:00 и 5:00.
  • Оператор дефиса позволяет указать диапазон значений. Если у вас есть 1-5 поле «День недели», задание будет запускаться каждый рабочий день (с понедельника по пятницу).
  • Оператор косой черты позволяет указать значения, которые будут повторяться в течение определенного интервала между ними. Например, если у вас есть */4 поле «Час», это означает, что действие будет выполняться каждые четыре часа. Это то же самое, что указать 0,4,8,12,16,20. Вместо звездочки перед оператором косой черты вы также можете использовать диапазон значений, 1-30/10 то же самое, что и 1,11,21.


Общесистемные файлы Crontab

Синтаксис общесистемных файлов crontab немного отличается от пользовательских crontabs. Он содержит дополнительное обязательное поле пользователя, которое указывает, какой пользователь будет запускать задание cron.

* * * * * <username> command(s)

Предопределенные макросы

Существует несколько специальных макросов расписания Cron, используемых для определения общих интервалов. Вы можете использовать эти ярлыки вместо указания даты в пять столбцов.

  • @yearly (или @annually) - запускать задание один раз в год в полночь (12:00) 1 января. Эквивалент 0 0 1 1 *.
  • @monthly - запускать указанное задание один раз в месяц в полночь первого дня месяца. Эквивалент 0 0 1 * *.
  • @weekly - запускать указанное задание один раз в неделю в полночь воскресенья. Эквивалент 0 0 * * 0.
  • @daily - запускать указанное задание один раз в день в полночь. Эквивалент 0 0 * * *.
  • @hourly - запускать указанное задание один раз в час в начале часа. Эквивалент 0 * * * *.
  • @reboot  - Запустите указанное задание при запуске системы (время загрузки).


Linux Crontab Command 

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

Вы можете использовать команду crontab для просмотра, добавления, удаления или изменения заданий cron, используя следующие параметры:

  • crontab -e - Отредактируйте файл crontab или создайте его, если он еще не существует.
  • crontab -l - Показать содержимое файла crontab.
  • crontab -r - Удалить ваш текущий файл crontab.
  • crontab -i - Удалите текущий файл crontab с запросом перед удалением.
  • crontab -u <username> - Изменить другой файл crontab использования. Требуются права системного администратора.


   Команда crontab открывает файл crontab с помощью редактора, заданного переменными среды VISUAL или EDITOR.



Переменные Crontab 

Демон cron автоматически устанавливает несколько переменных окружения .

  • Путь по умолчанию установлен в PATH=/usr/bin:/bin. Если команда, которую вы вызываете, присутствует в указанном пути cron, вы можете использовать абсолютный путь к команде или изменить $PATH переменную cron . Вы не можете неявно добавлять, :$PATH как если бы вы использовали обычный скрипт.
  • Оболочка по умолчанию установлена ​​в /bin/sh. Вы можете установить другую оболочку, изменив SHELLпеременную.
  • Cron вызывает команду из домашнего каталога пользователя. HOME Переменной может быть изменено с помощью настроек в crontab.
  • Уведомление по электронной почте отправляется владельцу crontab. Чтобы перезаписать поведение по умолчанию, вы можете использовать MAILTOпеременную среды со списком (через запятую) всех адресов электронной почты, которые вы хотите получать по электронной почте. Если MAILTOопределено, но пусто ( MAILTO=""), письмо не отправляется.


Crontab Ограничения 

Системные администраторы могут контролировать , какие пользователи имеют доступ к crontab команде при помощи функции /etc/cron.deny и /etc/cron.allow файлы. Файлы состоят из списка имен пользователей, по одному имени пользователя в строке.

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

Если /etc/cron.allow файл существует, только пользователи, перечисленные в этом файле, могут использовать crontab команду.

Если ни один из этих файлов не существует, команду могут использовать только пользователи с правами администратора crontab.


Примеры Cron

Ниже приведены некоторые примеры заданий cron, которые покажут вам, как запланировать выполнение задачи на разные периоды времени.

  • Запускайте команду в 15:00 каждый день с понедельника по пятницу:

    0 15 * * 1-5 command
    
    
  • Запускать скрипт каждые 5 минут и перенаправлять стандартный вывод на dev null, только стандартная ошибка будет отправлена ​​на указанный адрес электронной почты:

    MAILTO=email@example.com
    */5 * * * * /path/to/script.sh > /dev/null
    
    
  • Выполните две команды каждый понедельник в 3 часа дня (используйте оператор &&между командами):

    0 15 * * Mon command1 && command2
    
    
  • Запускайте PHP-скрипт каждые 2 минуты и записывайте результат в файл :

    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log
    
    
  • Запускать сценарий каждый день, каждый час, каждый час, с 8:00 до 16:00:

    00 08-16 * * * /path/to/script.sh
    
    
  • Запускать сценарий в первый понедельник каждого месяца в 7 часов утра.

    0 7 1-7 * 1 /path/to/script.sh
    
    
  • Запускайте сценарий в 21:15 1 и 15 числа каждого месяца:

    15 9 1,15 * * /path/to/script.sh
    
    
  • Набор пользовательских HOME, PATH, SHELLи MAILTOпеременные и запустить команду каждую минуту.

    HOME=/opt
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    SHELL=/usr/bin/zsh
    MAILTO=email@example.com
    
    */1 * * * * command


Вывод 

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


    Комментарии

    Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Загрузка комментариев...