Crontab в Linux – із прикладами та інструментами в реальному часі

Зміст

Розглянемо crontab, його команди та різноманітні операції, що пов’язані з ним.

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

Походження

Crontab – це абревіатура від “cron table”. Слово cron походить від грецького слова “Хронос”, що означає час. Crontab є системним процесом-демоном, який автоматично виконує певні завдання та операції відповідно до заданого розкладу.

Сфери застосування

Crontab корисний для автоматизації різноманітних дій, таких як резервне копіювання, ротація файлів журналів, синхронізація даних між віддаленими комп’ютерами, очищення тимчасових каталогів тощо. Crontab можна застосовувати для будь-якої роботи, але особливо він стає незамінним при виконанні задач системного адміністрування.

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

Давайте розглянемо, як це налаштувати.

Синтаксис Crontab

Для виконання списку команд, утиліта cron зчитує файли конфігурації. Щоб інтерпретувати рядки в таблицях crontab, вона використовує спеціальний синтаксис. Crontab складається з шести полів, де перші п’ять (1-5) визначають дату і час запуску. Останнє, шосте поле, може бути ім’ям користувача та/або задачею/командою/скриптом, що підлягає виконанню.

* * * * * ІМ’Я_КОРИСТУВАЧА КОМАНДА/СЦЕНАРІЙ_ДЛЯ_ВИКОНАННЯ

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ День тижня (0 – 6) (0 – неділя або використовувати назви днів)
│ │ │ |____________ Місяць (1 – 12), * – кожен місяць
│ │ |______________ День місяця (1 – 31), * – кожен день
│ |________________ Година (0 – 23), * – кожна година
|_______________ Хвилина (0 – 59), * – кожна хвилина

Примітки:

  • Зірочка (*) використовується для позначення всіх можливих значень для відповідного поля. Наприклад, зірочка в полі години означатиме кожну годину, а в полі місяця – кожен місяць.

Ім’я користувача є необов’язковим параметром (застосовується лише у системному файлі crontab)

Приклади:

Розглянемо наведені вище правила синтаксису на конкретних прикладах

0 5 * * * /scripts/job.sh

1. Запланувати виконання cron о 5 ранку щодня

0 6,18 * * * /scripts/job.sh

2. Запланувати виконання cron двічі на день, о 6:00 та о 18:00

* * * * * /scripts/job.sh

3. Запланувати виконання cron щохвилини

0 19 * * mon /scripts/job.sh

4. Запланувати виконання cron щопонеділка о 19:00.

*/10 * * * * /scripts/job.sh

5. Запланувати виконання cron кожні 10 хвилин.

* * * feb,jun,oct * /script/job.sh

6. Запланувати виконання cron у зазначені місяці

25 7 4 3 * /home/script/backup.sh

7. Запустити скрипт оболонки /home/script/backup.sh 4 березня о 7:25 ранку

8. Запланувати виконання cron кожні 30 секунд

  • Оскільки в Crontab немає прямого контролю над секундами, цього можна досягти за допомогою наступних двох кроків.
* * * * * /home/scripts/script.sh
  • Спочатку заплануємо завдання, яке виконується щохвилини.
* * * * * sleep 30; /home/scripts/script.sh

Тепер застосуємо команду sleep, щоб призупинити виконання на 30 секунд.

Завдання, описане вище, призупинить виконання на 30 секунд, а потім відновить його.

Типи конфігураційних файлів Cron

Існує два основних типи конфігураційних файлів cron:

Системний Crontab в UNIX/Linux

Для цього потрібні права root, оскільки зазвичай вони використовуються для системних служб та важливих завдань. Шосте поле (в описі синтаксису вище) – це ім’я користувача, від імені якого запускається команда. Це дозволяє системному crontab запускати команди від імені будь-якого користувача.

Користувацький Crontab

Користувачі також можуть налаштовувати власні завдання cron за допомогою команди crontab. У цьому випадку шосте поле (в описі синтаксису) – це команда для виконання, і всі команди запускаються від імені користувача, який створив crontab. Кожен користувач може мати свій власний файл crontab. Хоча ці файли розташовані в /var/spool/cron/crontabs, вони не призначені для прямого редагування. Для зміни або налаштування власних завдань cron необхідно використовувати команду crontab.

Як це працює? Служба cron (демон) працює у фоновому режимі і постійно (щохвилини) перевіряє файл /etc/crontab та каталоги /etc/cron.*/. Також перевіряється каталог /var/spool/cron/. Команди виконуються cron

коли значення в полях хвилин, годин і місяця збігаються з поточним часом, і принаймні одне з полів дня (день місяця або день тижня) відповідає поточному дню.

Основні команди

Перегляд існуючих завдань Cron

crontab -l

За допомогою наведеної нижче команди можна переглянути список усіх завдань Cron без необхідності відкривати конфігураційний файл crontab:

[[email protected] ~]# crontab -l
no crontab for techukraine.net
[[email protected] ~]#

Якщо завдання не існують, ви отримаєте такий результат:

[[email protected] ~]# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[[email protected] ~]#

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

Таблиця cron є персоналізованою для кожного користувача. Це означає, що для перегляду списку cron необхідно увійти в систему під відповідним користувачем.

Перегляд списку Cron для конкретного користувача

Щоб переглянути заплановані завдання іншого користувача, використовуйте параметр -u (Користувач) та -l (Список).

crontab -u інше_ім’я_користувача -l

Приклад: crontab -u techukraine.net -l

Додавання/редагування записів Crontab

Для редагування запису crontab можна використовувати параметр -e, як показано нижче.

crontab -e

Зазначена вище команда відкриє редактор vi, де ви зможете вказати деталі завдання та зберегти файл. Після збереження ви можете перевірити налаштування cron за допомогою команди crontab -l.

Додавання/редагування записів Crontab для конкретного користувача

crontab -u інше_ім'я_користувача -e

Редагування crontab для іншого користувача можна виконати за допомогою такої команди:

Приклад: crontab -u techukraine.net -e

Видалення запису Crontab

Щоб видалити всі заплановані завдання без підтвердження від crontab, використовуйте параметр -r:

crontab -r

crontab -i -r
[[email protected] ~]# crontab -i -r
crontab: really delete techukraine.net's crontab?

Якщо необхідно отримати підтвердження перед видаленням запланованих завдань, використовуйте опцію -i з -r. У цьому випадку користувачу буде запропоновано підтвердити видалення crontab користувача.

Спеціальні рядки Crontab

Крім наведеного вище синтаксису, в Crontab можна використовувати вісім спеціальних рядків. Це не тільки економить час, але і покращує читабельність.
Спеціальний рядок
Опис
@reboot
Запустити один раз після завантаження.
@yearly
Запускати раз на рік, тобто 0 0 1 1 *
@annually
Аналогічно @yearly
@monthly
Запускати раз на місяць, тобто 0 0 1 * *
@weekly
Запускати раз на тиждень, тобто 0 0 * * 0
@daily
Запускати раз на день, тобто 0 0 * * *
@midnight
Аналогічно @daily
@hourly

Запускати раз на годину, тобто 0 * * * *

Приклади спеціальних рядків Crontab

1. Crontab для планування завдань на рік

@yearly /scripts/greeting.sh

Наведений вище вираз можна використати для надсилання новорічного привітання. Він буде виконуватися в першу хвилину кожного року.

2. Crontab для планування завдань, які потрібно виконувати щомісяця.

@monthly /scripts/cleanup.sh

Наведений вище вираз можна використовувати для виконання дій з очищення на початку кожного місяця.

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

Каталог Cron

  • Системний адміністратор може використовувати загальносистемний розклад cron, який зберігається у спеціальних каталогах cron, як показано нижче
  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly

/etc/cron.weekly

Реальні приклади Crontab

Розглянемо кілька практичних прикладів, які зазвичай використовуються системними адміністраторами або ІТ-фахівцями.

Видалення порожніх файлів та каталогів

45 0 * * * techukraine.net find /tmp -type f -empty -delete

Наведений вище вираз cron щодня о 0:45 знаходитиме порожні файли та каталоги в каталозі /tmp і видалятиме їх. Щоб виконати це завдання, потрібно вказати ім’я користувача. У наведеному прикладі користувач techukraine.net виконує операцію cron.

Виконання кількох завдань за допомогою одного cron

* * * * * /home/scripts/backup.sh; /home/scripts/script.sh

Кілька завдань/операцій можна розділити крапкою з комою (;) і призначити їх одному виразу cron.

Інструменти форматування та тестування Cron

Досі ми обговорювали команди та синтаксис crontab для планування завдань. Але якщо ви не є системним адміністратором і не займаєтесь регулярним налаштуванням Cron, запам’ятати синтаксис може бути складно, що підвищує ризик помилок. Не хвилюйтесь, є рішення.

В інтернеті є кілька інструментів для форматування Cron.

# 1. Генератор завдань Cron Генератор завдань Cron

Це зручний графічний інтерфейс, де можна вказати хвилини, дні та шлях до скрипту для створення crontab.

Розглянемо приклад: потрібно запускати /home/processMonitor.sh кожні 5 хвилин з понеділка по п’ятницю.

Таким чином, ми отримаємо наступний синтаксис Cron, який можна додати до crontab за допомогою команди
crontab -e

0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh

# 2. Easycron Easycron

Це зручний веб-планувальник завдань cron. Можна створити завдання cron, вказавши URL-адресу, час виконання. Також можна задати вираз cron або додати його вручну. Важливим є те, що можна використовувати базову HTTP-автентифікацію для додаткової безпеки.

Easycron також можна використовувати для інших цілей: створення стандартних виразів Cron, ведення журналів виконання завдань, сповіщення електронною поштою, окремі журнали помилок тощо.

# 3. Генератор Crontab Генератор Crontab

Це ще один зручний інструмент для генерації crontab. За його допомогою можна зберегти вивід cron у файл або відправити його електронною поштою.

# 4. Crontab Guru Crontab Guru

Це простий онлайн-редактор виразів для розкладу cron. Він також надає корисні засоби моніторингу cronjob. Потрібно лише скопіювати отриману команду та додати її до визначення crontab. У випадку, якщо завдання cron не виконається або не запуститься, ви отримаєте сповіщення електронною поштою.

У наведеному прикладі завдання буде виконуватися о 04:05 кожного дня, кожного місяця та кожного тижня.

# 5. Тестер CRON Тестер CRON

Дозволяє перевірити визначення часу/дати cron. Іноді виникає потреба в декодуванні існуючого синтаксису cron для усунення проблем або просто для тестування.

Для цього можна використовувати цей інструмент. Потрібно скопіювати та вставити вираз cron у відповідне поле, вибрати кількість ітерацій та натиснути “Тестувати”, щоб переглянути дати, коли він буде запущений.

Розглянемо вираз cron 4 3 */2 * *, який має запускатися о 03:04 (AM) кожні два дні. Перевіримо його за допомогою cron tester.

Висновок Сподіваюся, що наведена вище інформація допомогла вам краще зрозуміти Crontab та налаштування завдань cron. Планування завдань через Cron є одним з багатьох завдань, які виконує адміністратор Linux. Якщо вас цікавить отримання додаткових знань, подивіться цей курс

.