Как использовать команду Crontab в Unix

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

Вступление

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

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

Что такое Крон? Что такое Crontab?

Чтобы освоить cron и планирование, полезно иметь представление о различной, но схожей терминологии.

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

Вот изображение с системным crontab, которое ссылается на два внешних скрипта:

Редактирование crontabнапрямую

Обычно таблицы cron выглядят так:

 <cron-expression> <command> 
 <cron-expression> <command> 

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

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

Есть два метода планирования заданий cron:

  1. Отредактируйте crontab напрямую

Мы можем просмотреть запланированные нами задания cron, выполнив эту команду:

 $ crontab -l 

Если мы хотим добавить или отредактировать задание cron, мы можем использовать эту команду:

 $ crontab -e 

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

  1. Копирование скриптов в каталоги /etc/cron.*

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

Место расположения График выполнения


/etc/cron.hourly/ Раз в час /etc/cron.daily/ Один раз в день, каждый день /etc/cron.monthly/ Раз в месяц, каждый месяц /etc/cron.weekly/ Раз в неделю, каждую неделю

Пользователи могут копировать свои сценарии в соответствующие каталоги в зависимости от того, с какой периодичностью их запускать. Файл crontab, представленный в /etc/crontab содержит выражения cron, определенные для каждого каталога, и каждую минуту проверяет, подходит ли время для выполнения сценариев:

Копирование скриптов в соответствующие каталоги/etc/cron.\*{.ezlazyload}

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

Создание выражения Cron

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

 * * * * * user-name command-or-file-to-be-executed 
 # <-----------> <-------> <----------------------------> 
 # Cron 
 # Expression 

Примечание . user-name используется при редактировании общесистемного crontab. Специфичный для пользователя crontab не нужен, потому что эта информация уже известна.

5 звездочек ( * * * * * ) в выражении cron можно заменить числами. Их позиции указывают на их ценность:

* Должность Описание Допустимые числовые значения


1 Минуты 0–59 2 Час 0–23 3 День месяца 1-31 4 Месяц 0–12 5 День недели [0 означает воскресенье, а суббота - 6] 0-6

Помимо чисел, есть специальные символы, которые мы можем использовать при редактировании crontab:

Символы Описание


* Определение этого будет запускать команду для каждого временного интервала. Например, *, определенный в столбце минут, скрипт будет выполняться каждую минуту. , Чтобы повторить задачу в нескольких разных временных рамках, можно использовать запятые. Например, чтобы запускать сценарий каждые 10 минут, столбец минут можно задать как 0,10,20,30,40,50. / Альтернативный, более простой вариант ",". Чтобы запускать скрипт каждые 10 минут, столбец минут можно указать как * / 10. - Задает диапазон значений. Чтобы запускать скрипт каждую минуту в течение первых 10 минут, выражение в столбце минут может быть представлено как: 0-10

Есть много вариантов, которые нужно понять, возможно, лучше всего показать, как они работают, на нескольких примерах:

  1. Вот как запустить echo "hello there!" «4-й день каждой недели» (т.е. в четверг) в 12:10:
1
<!-- -->
 10 12 * * 4 root echo "hello there!" 
  1. А вот более сложный пример, в котором мы сохраняем использование диска каждые 20 минут в первые 10 дней последних трех месяцев года:
1
<!-- -->
 */20 * 1-10 10,11,12 * df -h >> /tmp/diskusage 

Выражения Cron на первый взгляд могут показаться ошеломляющими. В Интернете доступно множество инструментов для упрощения создания выражений; crontab.guru - один из широко популярных инструментов, доступных в Интернете по адресу https://crontab.guru/ .

Давайте воспользуемся crontab.guru, чтобы проверить, действителен ли наш второй экспресс: https://crontab.guru/#*/20_*_1-10_10,11,12_* .

Копирование скриптов в соответствующие каталоги/etc/cron.\*{.ezlazyload}

Практическое руководство: создание задания Cron для отправки по электронной почте диска и использования памяти

В ИТ-отделе системные администраторы и другие операторы часто контролируют ресурсы компьютера, такие как память и размер диска. Crontab обычно используется для обеспечения непрерывного выполнения сценариев мониторинга.

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

Следующая демонстрация была протестирована на Ubuntu 20.04.1 LTS . Этот пример настроен для отправки электронной почты в учетную запись Gmail, вам может потребоваться настроить ваши конфигурации для других поставщиков электронной почты.

  • Сначала вам нужно установить watchmon. Следуйте их README, чтобы узнать, как его настроить:
1
<!-- -->
 > git clone https://github.com/datawrangl3r/watchmon 
 > cd watchmon 
 > bash setup.sh 
  • Сценарий запустит процесс cron, установит http://www.mutt.org/ , SMTP-клиент командной строки, для отправки электронных писем. После установки используйте текстовый редактор для mutt.rc в вашем домашнем каталоге: /home/user/mutt/mutt.rc .

Отредактируйте файл так, чтобы он выглядел следующим образом, изменив данные шаблона с помощью вашего электронного письма:

 set ssl_starttls=yes 
 set ssl_force_tls=yes 
 
 set imap_user = " [email protected] " 
 set imap_pass = "PASSWORD" 
 
 set from=" [email protected] " 
 set realname="Your Name" 
 
 set folder = "imaps://imap.gmail.com/" 
 set spoolfile = "imaps://imap.gmail.com/INBOX" 
 set postponed="imaps://imap.gmail.com/[Gmail]/Drafts" 
 
 set header_cache = "~/.mutt/cache/headers" 
 set message_cachedir = "~/.mutt/cache/bodies" 
 set certificate_file = "~/.mutt/certificates" 
 
 set smtp_url = "smtps:// [email protected] : [email protected] :465/" 
 
 set move = no 
 set imap_keepalive = 900 
  • Поскольку Google не позволяет своим службам быть доступными для менее безопасных приложений, нам необходимо разрешить доступ для учетной записи электронной почты, которая будет использоваться в настройках SMTP. Посетите https://myaccount.google.com/security и включите для менее безопасного доступа доступ к приложениям, как показано на гифке ниже:

Разрешение доступа к менее безопасным приложениям вGmail{.ezlazyload}

  • Теперь, когда наши сценарии и конфигурации учетной записи электронной почты готовы, мы можем настроить наш crontab. Отредактируйте ваш crontab, вызвав:
1
<!-- -->
 $ crontab -e 

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

 * * * * * /mnt/c/Users/sathy/Documents/datawrangler/watchmon/watchmon.sh -t=40 [email protected] 

Это можно настроить, как показано ниже:

Рисунок 5. Разрешение доступа к менее безопасным приложениям вGmail{.ezlazyload}

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

Работа в Cron и устранение сбоев

Хотя crontab очень мощные, они не могут предупредить пользователя, если базовое задание не запущено или запланированный исполняемый файл обнаруживает ошибку. Журналы для каждого запуска задания можно найти в файле /var/log/syslog Обязательно просмотрите свои журналы после того, как запланированы действия.

Помимо ошибок cron и команд, многие crontab страдают от человеческих ошибок. При настройке заданий cron, вот несколько распространенных причин, по которым ваше задание cron может работать не так, как вы ожидали:

  • У скриптов нет разрешения на выполнение. Те исполняемые файлы, которые должны запускаться как задания cron, должны иметь разрешение 755 т.е. rwx-rw-rw. Утилита cron может выполнять сценарии только в том случае, если у пользователя есть для нее разрешения на выполнение.

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

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

Заключение

В этой статье мы рассмотрели программу cron, выражения cron и crontab. Мы использовали команду crontab для отображения и редактирования заданий cron. Crontab - одни из лучших инструментов для Unix-подобных систем для автоматизации повторяющихся задач. Что бы вы запланировали с работой cron?

comments powered by Disqus