Крон – це планувальник завдань, що працює в Unix-подібних операційних системах, включаючи всі дистрибутиви Linux. Демон cron працює на сервері в фоновому режимі і запускає за розкладом заплановані завдання. У цій статті ми розглянемо установку cron на сервер з Linux CentOS 8, познайомимося з синтаксисом cron, навчимося додавати в нього різні завдання, управляти розкладом запуску.

Установка cron в Linux

За замовчуванням cron доступний при установці CentOS 8. Якщо ж у вас з якихось причин він відсутній, ви можете встановити його з базового сховища за допомогою yum / dnf:

# dnf update -y – оновити всі ПО на сервері
# dnf install crontabs -y – встановіть cron

У моєму випадку cron вже був встановлений:

установка crontab в linux centos

Після установки, демон crond потрібно додати в автозавантаження і запустити:

# systemctl enable crond.service
# systemctl start crond.service

Crontab: додавання завдання в планувальник cron

Для додавання завдань в cron можна використовувати команду:

# crontab -e

Дана команда відкриє файл для задач для вашого користувача в текстовому редакторі за замовчуванням (у мене це ми, Але можна змінити на зручний для вас, наприклад нано). Налаштування завдань таким способом виключає, що ви допустите помилку в синтаксисі. Редактор crontab просто не дасть зберегти файл з помилками.

Також можна відредагувати файл завдань cron вручну через mc:

# mcedit /var/spool/cron/root – ім’я файлу може відрізнятися, в залежності від того, під яким користувачем ви працюєте.

Щоб додати просте завдання по запуск bash скрипта в cron, виконайте:

# crontab -e

Тепер додайте розклад завдання і шлях до файлу скрипта:

 * * * * * /root/test.sh

Збережіть файл (редагування файлу за аналогією з редактором vim: зберегти Ctrl + O і вийти Ctrl + x).

Якщо все зробили правильно, ваше завдання буде додано. Щоб вивести список завдань cron, виконайте:

# cat /var/spool/cron/root

* * * * * /root/test.sh

Або так:

# crontab -l

Даний скрипт буде запускатися через cron щохвилини.

Мінімальний час – 1 хвилина. Демон cron переглядає список завдань один раз в хвилину. Проглядаються наступні файли і каталог:

/etc/crontab
/etc/cron.*/.
/var/spool/cron/

Кожен запис розкладу crontab складається з 5 полів:

минуты часы день_месяца месяцы день_недели
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

cron синтаксис команди, настройка розкладу

Можна використовувати такі допустимі значення для кожного з полів:

поле діапазон значень
хвилини 0-59
годинник 0-23
день місяця 1-31
місяць 1-12 або jan feb mar apr may jun jul aug sep oct nov dec
день тижня 0-6 (Де 0 Цієї неділі) або sun mon tue wed thu fri sat

знак * означає всі допустимі значення. Приклад завдання:

15 00 * * 1 /root/test.sh

Зазначений в завданні скрипт, буде запускатися щопонеділка о 00 годині 15 хвилин. Для спрощення синтаксису cron-файлу використовують спеціальні символи:

Кома (,) : Коми розбиваються значення розкладу для виконання однакової завдання, але в різний час. Наприклад, якщо вам потрібно виконувати завдання в 15 і 30 хвилин, ви можете задати розклад так:

15 * * * *
30 * * * *

Або ісползовать коротший синтаксис з коми:

15,30 * * * *

Слеш (/) : Використовувати косу риску можна для вираження будь-якого кроку. Наприклад, вам потрібно запускати якесь завдання кожні 2 години. У звичайному написанні файл cron буде громіздким, використовуючи / ви помітно скоротіть вміст cron файл:

* */2 * * *
Дефіс (-) : Дефіс вказує діапазон значень в поле. Якщо ви хочете запускати завдання перші 10 хвилин або останні 10 хвилин, вкажіть діапазон через дефіс:

0-10 * * * *
50-60 * * * *

Ще кілька прикладів розкладів для cron:

  • запуск по буднях о 12:00 і 18:00: 0 12,18 * * 1-5
  • кожні 30 хвилин: */30 * * * *
  • кожну суботу: 0 0 * * 6
  • щовівторка та щочетверга о 2:00 ночі: 0 2 * * 2,4

Ще в cron можна використовувати спеціальні змінні.

Мінлива опис еквівалент
@ перезавантажити Запускається один раз при завантаженні
@ рік

або

@ щорічно

один раз в рік 0 0 1 1 *
@ щомісяця один раз на місяць 0 0 1 * *
@ тиждень один раз на тиждень 0 0 * * 0
@daily один раз в день 0 0 * * *
@hourly щогодини 0 * * * *
@ південь Опівночі

Тобто для запуску завдання раз в день можна використовувати формат:

@daily echo "Проверка cron"

Можна відредагувати cron файл іншого користувача:

# crontab -u username

Відправлення повідомлень cron на e-mail

Якщо ви хочете отримувати інформацію про виконання ваших завдань cron поштою, потрібно налаштувати cron-файлу з завданнями.

Для відправки пошти на сервері дожен бути встановлений поштовий-агент. Для тесту, я встановив на сервер sendmail:

# dnf install sendmail -y
# service sendmail start

sendmail – безкоштовний агент для передачі пошти, який доступний практично для будь-якої операційної системи.

Настроєм параметри відправки e-mail в cron-файлі. Додайте в файл наступні рядки:

MAILTO="*@gmail.com"
SHELL=/bin/bash
HOME=/
* * * * * echo "Проверка cron"

MAILTO – вкажіть свою поштову скриньку

SHELL – оболонка користувача

HOME – шлях до файлу cron

cron - поштові повідомлення email, mailto

Після кожного запуску завдання на вказаний email надсилається повідомлення:

лист про завдання відправлено через crontab

Інформацію про запуск завдання cron можна зберігати в лог-файл. Для цього, в кінці завдання потрібно додати >> і вказати шлях до лог-файлу:

* * * * * echo "Проверка cron" >> /var/log/admin/journal.log

Якщо у вашому cron-файлі додано багато завдань і результат виконання якихось із них, не потрібно відправляти на пошту, дані завдання ви можете запускати в «тихому» режимі:

* * * * * echo "Проверка cron" >> /dev/null 2>&1

Таким чином ви можете відокремити деякі завдання, щоб не відправляти повідомлення про всіх завдання собі на поштову скриньку.

Файли конфігурації і логи планувальника cron

Основний файл конфігурації демона cron – / etc / crontab. Крім cron-файлу, завдання можна запускати з наступних директорій:

  • /etc/cron.daily – запуск скриптів один раз в день
  • /etc/cron.hourly – запуск скриптів щогодини
  • /etc/cron.monthly – запуск скриптів раз на місяць
  • /etc/cron.weekly – запуск скриптів раз в тиждень

Просто розмістіть потрібні скрипти в потрібну директорію, і вони будуть виконуватися згідно розкладу.

Можна обмежити доступ до планування за допомогою файлів /etc/cron.allow і /etc/cron.deny. Досить створити ці файли і додати в нього користувачів, яким, відповідно, дозволено і заборонено запускати завдання cron.

У файл / etc / crontab теж можна поміщати завдання. Зазвичай даний файл використовується root користувачем або для настройки системних задач. Особисті файли користувачів для cron завдань, зберігаються в директорії / var / spool / cron / або / var / cron / tabs /.

Щоб відстежити виконання завдань або відстежити помилки, можна звернутися до лог-файлу / var / log / cron. В даному файлі фіксується запуск всіх завдань і помилки в роботі демона, якщо вони є:

/ var / log / cron - лог crontab

Leave a Reply

Your email address will not be published. Required fields are marked *