Планирование заданий Cron с помощью Crontab

Планирование заданий Cron с помощью Crontab

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

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

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

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

Crontab (таблица cron) — это текстовый файл, определяющий расписание заданий cron. Существует два типа файлов 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 , 3, 5, задача будет запущена в 1, 3 и 5 часов утра.
  • - Оператор дефис позволяет указать диапазон значений. Если в поле «День недели» указано значение 1-5 , задача будет запускаться каждый будний день (с понедельника по пятницу).
  • / — Оператор слэш позволяет указать значения, которые будут повторяться с определённым интервалом. Например, если в поле «Час» указано */4 , это означает, что действие будет выполняться каждые четыре часа. Это то же самое, что указать 0,4,8,12,16,20 . Вместо звёздочки перед оператором слэш можно также использовать диапазон значений: 1-30/10 означает то же самое, что и 1,11,21 .

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

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

 * * * * *  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

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

  • crontab -e — Редактировать файл crontab или создать новый, если он еще не существует.
  • crontab -l — Отображение содержимого файла crontab.
  • crontab -r — удалить текущий файл crontab.
  • crontab -i — удаление текущего файла crontab с выводом запроса перед удалением.
  • crontab -u — редактирование файла crontab другого пользователя. Для этой опции требуются права системного администратора.

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

Создать задание Cron

Переменные Crontab

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

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

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

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

По умолчанию существует только файл /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
  • Выполняйте две команды каждый понедельник в 15:00 (используйте оператор && между командами):

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

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

     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 — это демон, позволяющий планировать задачи на определенную дату и время.

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

cron crontab терминал

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *