Задачи cron и автоматизация в Linux

0
2
views
Photo by Dimitry Anikin from Pexels

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

И если ваша рабочая ОС — Linux, для автоматизации всех этих процессов можно использовать такой инструмент как cron.

Что такое cron?

Cron — это утилита для составления расписания задач, имеющаяся в Unix-подобных системах. Функционал этой утилиты включается демоном crond и выполняется в фоне. Для запуска скриптов cron читает crontab («таблицы cron).

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

Когда речь идет об отдельных пользователях и их задачах, cron руководствуется файлом /var/spool/cron/crontabs.

Что собой представляют задачи cron?

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

Давайте рассмотрим подробнее работу cron-задач.

Доступ к cron

Чтобы пользователь имел доступ к задачам cron, админ должен разрешить это в файле /etc/cron.allow.

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

Чтобы разрешить Джону доступ к cron, включите его имя в /etc/cron.allow. После этого он сможет создавать и редактировать cron-задачи.

Пользователям также можно запретить доступ к cron-задачам, внеся их имена в файл /etc/cron.d/cron.deny.

Как добавлять задачи cron в Linux

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

# Check cron service on Linux system
sudo systemctl status cron.service

Синтаксис задач cron

Для добавления и вывода задач crontab используется следующие флаги:

  • crontab -e: редактирование содержимого crontab для добавления, удаления или изменения задач.
  • crontab -l: вывод всех cron-задач текущего пользователя.
  • crontab -u username -l: вывод задач другого пользователя.
  • crontab -u username -e: редактирование задач другого пользователя.

Выведя на экран задачи cron, вы увидите что-то типа этого:

# Cron job example
* * * * * sh /path/to/script.sh

В этом примере:

— звездочки * * * * * представляют минуты, часы, дни, месяцы и дни недели (соответственно).

ЗначениеОписание
Минуты0-59Команда будет выполняться в указанную минуту.
Часы0-23Команда будет выполняться в указанный час.
Дни1-31Команда будет выполняться в указанный день месяца.
Месяцы1-12Месяц, в котором должна выполняться команда.
Дни недели0-6Дни недели, по которым должна запускаться команда. Здесь 0 — воскресенье.

— sh говорит о том, что это bash-скрипт, и запускаться он должен из /bin/bash.

— /path/to/script.sh указывает путь к скрипту.


От редакции Techrocks. Нам показалось, что в пояснении синтаксиса не хватает подробностей, поэтому дополняем.

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

Время и дату выполнения можно указывать:

  • звездочками * — тогда задача выполняется каждую/й {минуту, час, день, месяц, день недели} — в зависимости от того, на какой позиции стоит звездочка
  • целыми числами — чтобы указать точно время или дату
  • целыми числами через запятую — перечисляем нужные минуты, часы и т. д.
  • диапазонами, через дефис (например, 1-10) — чтобы задача выполнялась в определенный диапазон времени или дат
  • с определенным шагом.

На последнем пункте остановимся подробнее. Для указания шага используется синтаксис */целое-число. Указанное целое число — шаг.

Например, если на позиции месяца стоит */4, это значит, что задача будет выполняться каждый четвертый месяц . А если на позиции минут стоит 0-59/2, это значит, что задача будет выполняться каждые две минуты.


Ниже представлена схема синтаксиса cron-задач.

*   *   *   *   *  sh /path/to/script/script.sh
|   |   |   |   |              |
|   |   |   |   |      Команда или скрипт, которые нужно выполнить        
|   |   |   |   |
|   |   |   |   |
|   |   |   |   |
|   |   |   | День недели(0-6)
|   |   |   |
|   |   | Месяц(1-12)
|   |   |
|   | Число месяца(1-31)  
|   |
| Час(0-23)  
|
Минута(0-59)

Примеры cron-задач

В таблице представлены три примера cron-задач.

РасписаниеЗначение
5 0 * 8 *В 00:05 в августе
5 4 * * 6В 04:05 в субботу
0 22 * * 1-5В 22:00 ежедневно, с понедельника по пятницу

Если вам не удается с лету понять, на когда назначено выполнение задач, не огорчайтесь. Вы можете попрактиковаться в генерации расписаний cron на crontab guru.

Как создавать задачу cron

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

1. Создайте скрипт с именем date-script.sh. Он должен выводить системную дату и время и добавлять их в файл. Скрипт выглядит так:

2. Сделайте этот скрипт исполняемым, отредактировав права при помощи chmod.

chmod 775 date-script.sh

3. Добавьте скрипт в crontab при помощи crontab -e.

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

4. Проверьте результат, просмотрев содержимое файла date-out.txt. В этом файле ежеминутно должна добавляться запись с системным временем.

Возможные проблемы и их решение

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

1. Проверьте расписание

Для начала нужно проверить, что за расписание установлено для задачи. Сделать это можно при помощи команд crontab -l или crontab -u username -l (мы говорили о них ранее).

2. Просмотрите логи cron

Проверьте, запускается ли cron в намеченное время. Это можно посмотреть в логах, в var/log/cron. В некоторых дистрибутивах логи можно найти в /var/log/syslog.

Если в логах есть записи в соответствующее время, это означает, что сам cron запускается по расписанию.

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

3. Перенаправьте output в файл

Вы можете перенаправить результаты работы cron в файл, чтобы поискать затем возможные ошибки.

# Redirect cron output to a file
* * * * * sh /path/to/script.sh &> log_file.log

Итоги

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

Автоматизация в Linux завязана на задачах cron, так что эту утилиту определенно стоит изучить. Поэкспериментируйте с ней!

Перевод статьи «How to Automate Tasks with cron Jobs in Linux».

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here