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

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

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

Походження

Crontab розшифровується як «cron table». Слово крон походить від грецького слова Хронос, що означає час. Crontab — це системний процес демона, який автоматично виконуватиме деякі завдання та роботи відповідно до запланованого часу.

Випадки використання

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

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

Отже, давайте подивимося, як ми можемо це налаштувати.

Зміст

Синтаксис Crontab

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

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

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

Примітки:

  • Зірочка
  • використовується для зіставлення всіх можливих значень для поля. Наприклад, зірочка в полі години буде еквівалентною кожній годині або зірочка в полі місяця буде еквівалентною кожному місяцю.
  Як запустити програми Android на Linux

ім’я користувача є необов’язковим (доступне, лише якщо це системний файл 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 кожні 15 хвилин.

* * * 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:

Система UNIX/Linux Crontab

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

Користувач Crontab

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

Як це працює? Служба cron (демон) працює у фоновому режимі та постійно перевіряє (щохвилини) файл /etc/crontab і каталоги /etc/cron.*/. Він також перевіряє каталог /var/spool/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] ~]#

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

  Як встановити Signal Privacy Messenger на Linux

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

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

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

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

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

Додати/змінити записи Crontab

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

кронтаб -е

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

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

crontab -u another_username -e

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

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

Видалити запис Crontab

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

crontab -р

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

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

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

Окрім згаданого вище синтаксису, ми також можемо використовувати вісім спеціальних рядків, наданих Crontab. Це не тільки заощадить наш час, але й покращить читабельність.
Спеціальний рядок
опис
@reboot
Запустіть один раз, після запуску.
@щороку
Виконувати раз на рік, тобто 0 0 1 1 *
@щороку
Те саме, що @yearly
@щомісячно
Запуск раз на місяць, тобто 0 0 1 * *
@щотижня
Виконуйте раз на тиждень, тобто 0 0 * * 0
@щодня
Запускати раз на день, тобто 0 0 * * *
@півночі
Те саме, що @daily
@щогодини

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

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

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

@yearly /scripts/greeting.sh

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

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

  Як бездротово перенести файли Android на робочий стіл Linux

@monthly /scripts/cleanup.sh

Ми можемо виконати описане вище, щоб виконувати деякі дії з очищення на початку кожного місяця.

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

Каталог Cron

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

/etc/cron.weekly

Приклади Crontab Realtime

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

Видаліть порожні файли та каталог

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

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

Виконуйте кілька завдань за допомогою одного cron

* * * * * /home/scripts/backup.sh; /home/scripts/scritp.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, журнали виконання завдань Cron, сповіщення електронною поштою, окремі журнали помилок тощо.

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

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

# 4. Crontab Guru Гуру Кронтаб

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

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

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

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

Для цього ми можемо скористатися цим інструментом. Все, що нам потрібно зробити, це скопіювати та вставити наш вираз cron у поле визначення cron, потім вибрати кількість ітерацій і натиснути «Тестувати», щоб побачити різні дати, коли він буде запущений.

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

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

.