Перейти до змісту

Передумови

  • Комп’ютер під керуванням Rocky Linux.
  • Вміти використовувати ваш улюблений редактор для зміни файлу конфігурації в середовищі командного рядка (у цій статті використовуватиметься vi).
  • Ви зрозуміли базові знання про bash, python або інші інструменти створення сценаріїв або програмування та очікуєте автоматичного запуску сценарію.
  • Ви підключилися до свого комп’ютера через SSH (це може бути користувач root або звичайний користувач з UID більше 1000).

Вступ до cron

GNU/Linux надає систему cron, яка є програмою завдань cron на основі часу для автоматизованих процесів. Це не важко, але досить потужно. Хочете, щоб сценарій або програма запускалися щодня о 17:00? cron може це зробити. Існують різні гілки (або варіанти) cron, які мають однакові функції. У цьому документі використовується cronie та версія 1.5.2. Ви можете натиснути тут, щоб знайти останню версію та журнал оновлення.

Опис cron

  • cronie – назва пакета, Rocky Linux включає cronie за умовчанням;
  • crontab – команда для підтримки crontab (розклад завдань) для кожного користувача;
  • crond.service - демон cronie, ви можете керувати демоном за допомогою systemctl start | restart | stop | status;
  • /etc/crontab - Призначає завдання cron різним користувачам, зазвичай ми більше звикли використовувати crontab -e. Наприклад, якщо ви зараз увійшли як користувач root, введіть crontab -e, і після збереження ви побачите певні завдання cron у файлі /var/spool/cron/root.
  • /var/log/cron * - Журнал Cronie за замовчуванням виконує ротацію журналів і закінчується суфіксом дати. Тут це означає символ підстановки.
  • anacron - частина cronie. Для отримання додаткової інформації про anacron перегляньте команди anacron-automation.

Команда crontab

crontab — це команда, отримана після встановлення пакета cronie. У порівнянні з anacron він більше підходить для серверів, які працюють 7* 24 години на добу. Загальні параметри crontab:

-e # редагує заплановані завдання crontab
-l # Переглядає завдання crontab
-r # видаляє всі завдання crontab поточного користувача

Використання cronie

Щоб дозволити різним користувачам виконувати різні команди (або сценарії) у різний час, їх можна записати в цей файл. Однак зазвичай ми більше звикли використовувати crontab -e.

shell > cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# 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
Параметр Значення Діапазон значень
1-ий * Перша хвилина години 0-59
2-ий * Година дня 0-23
3-ій * День місяця 1-31
4-ий * Місяць року 1-12
5-ий * День тижня 0-7 (0 і 7 позначають неділю)

У наведеному нижче прикладі, припускаючи, що ви виконуєте цю операцію як користувач root, введіть наступне:

  • crontab -e, який відкриє тимчасові завдання користувача root. Якщо ви використовуєте vi як типовий системний редактор, натисніть клавішу I, щоб увійти в режим вставки.
  • "#" означає, що це рядок коментаря.
# Система резервного копіювання щоночі о 10:00
00 22 * * * /usr/local/sbin/backup
  • Після введення наведеного вище (знову припускаючи, що vi є системним редактором), натисніть Esc, щоб вийти з режиму вставки.
  • Збережіть і закрийте свій файл за допомогою Shift+:+w+q+! (відображається внизу редактора).

Тепер сценарій запускатиметься щовечора о 22:00. Це спрощений приклад. Речі можуть стати складнішими, якщо вам потрібно щось складніше.

Увага

Сценарій повинен мати дозвіл на виконання (chmod +x), перш ніж cronie зможе його запустити.

Комплексні параметри

Вміст, який обговорювався досі, є спрощеними варіантами, але як щодо складніших завдань із розподілом часу?

# Припустімо, що ви хочете запускати сценарій резервного копіювання кожні 10 хвилин (проте це може бути непрактично, це лише приклад!) Впродовж дня. Для цього буде написано наступне:
* /10 * * * * /usr/local/sbin/backup
#Що робити, якщо ви хочете виконувати резервне копіювання лише кожні 10 хвилин у понеділок, середу та п’ятницю? * /10 * * * 1,3,5 /usr/local/sbin/backup
# Окрім суботи та неділі, раз на 10 хвилин, щодня, як робити резервну копію?
* /10 *  *  * 1-5 /usr/local/sbin/backup
Спеціальні символи Значення
* представляє будь-який час. Наприклад, перша * означає будь-яку хвилину, а друга * означає будь-яку годину
, позначає переривчастий час, наприклад 0 8,12,16 * * *, що означає, що команда виконуватиметься щодня о 8:00, 12:00 та 16:00
- представляє безперервний діапазон часу, наприклад 0 5 * * 1-6, що означає, що команда виконуватиметься о п'ятій годині ранку щодня з понеділка по суботу
*/n Позначає, як часто виконуватиметься інтервал, наприклад */10 * * * * означає, що це кожні 10 хвилин

Увага

Найменша одиниця часу, яку може розпізнати приятель, це 1 хвилина; якщо використовувати, наприклад, команду 30 4 1,15 * 5, це призведе до виконання команди 1-го та 15-го числа кожного місяця та о 4:30 ранку кожної п'ятниці; Вихідна інформація деяких сценаріїв або команд перешкоджатиме виконанню завдань, визначених у часі, і потрібне перенаправлення виводу, як-от */10 * * * * /usr/local/sbin/backup &> /dev/null

Q і A

  1. /etc/crontab і crontab -e, чи є різниця між цими двома методами? crontab -e не потребує вказувати користувача (за умовчанням використовується поточний користувач), тоді як /etc/crontab має вказувати користувача.
  2. Що робити, якщо вказана команда або сценарій не виконується належним чином? Перевірте файл /var/log/cron*, використовуйте journalctl -u crond.service, щоб перевірити інформацію про процес демона, чи має сценарій дозвіл x тощо, для усунення несправностей.
  3. Крім cronie, які існують варіанти cron? fcron, остання версія – 3.3.0 (dev, 2016-08-14). bcron, остання версія 0.11 (2015-08-12). cronsun, остання версія 0.3.5 (2018-11-20).

Підсумок

Для користувачів настільних ПК Rocky Linux або системних адміністраторів cronie є дуже потужним інструментом. Це дозволяє вам автоматизувати завдання та сценарії, щоб вам не довелося запускати їх вручну. Хоча базові знання не важкі, фактичне завдання може бути складним. Щоб дізнатися більше про crontab, відвідайте сторінку довідки crontab. Ви також можете шукати "crontab" в Інтернеті, що надає вам велику кількість результатів пошуку та допоможе вам точно налаштувати вираз crontab.

Author: tianci li

Contributors: Steven Spencer, Ganna Zhyrnova