JavaRush /Курси /Docker SELF /Автоматизація задач за допомогою cron і at

Автоматизація задач за допомогою cron і at

Docker SELF
Рівень 3 , Лекція 5
Відкрита

1. Навіщо потрібна автоматизація?

Автоматизація задач — це основа основ для будь-якого системного адміністратора, особливо в Linux. Уявіть роботу без автоматизації: щоранку ви заходите в термінал і вводите одну й ту саму команду, щоб зробити копії ваших даних, архівувати їх, відправити на сервер і почистити старі логи. Через тиждень така рутина змусить вас замислитися про зміну професії… Але ні, ми тут для того, щоб навчити вас, як зробити машину своїм вірним слугою.

Сьогоднішня лекція — це магія часу і задач. Ми навчимося автоматизувати процеси на рівні операційної системи за допомогою неймовірних інструментів cron та at. Ці утиліти рятують величезну кількість часу, а іноді й нервів.

Автоматизація — це рятувальне коло для будь-якої рутинної задачі. Наприклад, у вас є скрипт, який генерує звіт для вашого начальника. Цей звіт потрібен щоранку о 8:00. Замість того, щоб вставати раніше, щоби вручну запускати скрипт (і ризикувати застрягти з чашкою кави та забути запустити), ви можете налаштувати cron для виконання цієї задачі автоматично.

cron — це інструмент для регулярних задач, які повторюються в установлений час.
at — це утиліта для одноразових задач, які мають виконатися в конкретний момент часу.


2. Робота з cron

Що таке cron?

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

Ваше перше завдання у cron

Ось як виглядає базова команда для роботи з cron:

crontab -e

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

Синтаксис розкладу

Рядок у crontab складається із шести полів:

* * * * * COMMAND
- - - - -
| | | | └─ День тижня (0–7, де 0 та 7 — неділя)
| | | └── Місяць (1–12)
| | └─── День місяця (1–31)
| └──── Години (0–23)
└───── Хвилини (0–59)

Приклад: виконайте echo "Hello, Linux" щодня опівдні:

0 12 * * * echo "Hello, Linux"

Практика: запустимо просту задачу

  1. Відкрийте ваш crontab для редагування:

    crontab -e
    
  2. Додайте рядок:

    */5 * * * * echo "Hello, world! The time is $(date)" >> ~/cron_test.log
    

    Це завдання буде додавати рядок із поточним часом у файл cron_test.log кожні 5 хвилин. Збережіть файл і вийдіть.

  3. Перевірте, чи запустилася задача:

    tail -f ~/cron_test.log
    

    Через 5 хвилин ви маєте побачити оновлений запис у файлі.

Перегляд запланованих задач

Щоб перевірити поточні задачі:

crontab -l

Видалення задач

Щоб видалити всі задачі з crontab:

crontab -r

Реальні приклади використання cron

Архівування файлів

Наприклад, ви хочете архівувати файли з каталогу /var/logs щоночі о 3 годині:

  1. Напишіть скрипт:

    #!/bin/bash
    tar -czf /backup/logs_$(date +\%Y-\%m-\%d).tar.gz /var/logs
  2. Задайте розклад у crontab:

    0 3 * * * /path/to/script.sh
    

І все! Ви більше ніколи не забудете зробити резервну копію.

Повідомлення про завантаження системи

Наприклад, ви хочете отримувати повідомлення, якщо навантаження на процесор більше 80%:

  1. Напишіть скрипт:

    #!/bin/bash
    LOAD=$(uptime | awk '{print $10}' | sed 's/,//')
    if (( $(echo "$LOAD > 0.80" | bc -l) )); then
        echo "High CPU load: $LOAD" | mail -s "CPU Alert" you@example.com
    fi
  2. Встановіть розклад:

    */10 * * * * /path/to/cpu_check.sh
    

3. Робота з at

at дозволяє виконати одноразове завдання у конкретний час. На відміну від cron, завдання at не повторюються. Це зручно для завдань типу "зробити це завтра о 9 ранку".

Просте завдання з at

Ось приклад, як запланувати завдання:

echo "echo 'Привіт, Linux!'" | at now + 1 minute

Ця команда запустить команду echo 'Привіт, Linux!' через одну хвилину.

Ви можете вказати точний час і дату:

echo "echo 'Резервне копіювання завершено!'" | at 10:30 AM tomorrow

Керування завданнями at

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

atq

Приклад виводу:

1   Tue Oct 31 10:30:00 2023 a user
2   Tue Oct 31 11:00:00 2023 a user

Щоб видалити завдання:

atrm <job_id>

Практика: використання at для сповіщень

  1. Створіть завдання для сповіщення через 2 хвилини:

    echo "notify-send 'Час вийшов!'" | at now + 2 minutes
    
  2. Перевірте список завдань:

    atq
    
  3. Очікуйте появу спливаючого вікна через 2 хвилини.


4. Типові помилки при роботі з cron і at

Однією з найчастіших проблем є вказівка невірного шляху до скрипту або команди. Пам’ятайте, що cron виконується в мінімальному середовищі, тому може не знати про ваші змінні, такі як PATH. Найкращий спосіб — використовувати абсолютні шляхи.

Наприклад, якщо ви хочете запустити Python-скрипт:

*/30 * * * * /usr/bin/python3 /path/to/script.py

Також переконайтеся, що скрипт має права на виконання:

chmod +x /path/to/script.sh

Де це стане в нагоді?

Навички автоматизації потрібні майже в кожній професії, пов’язаній з IT. Ви можете використовувати ці знання:

  • Для автоматизації рутинних системних задач.
  • Для налаштування періодичного резервного копіювання.
  • Для моніторингу стану серверів.
  • На співбесідах, де часто запитують про cron і автоматизацію.

Якщо ви працюєте в DevOps, адмініструванні систем чи просто хочете стати продуктивнішим, розуміння cron і at допоможе вам виділитися та заощадити купу часу.

Тепер ви знаєте, як змусити Linux працювати за вас. Наступного разу, коли хтось скаржитиметься на рутину, просто посміхніться, бо ви — майстер автоматизації!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ