JavaRush /Курси /Docker SELF /Написання простого bash-скрипту для автоматизації завдань...

Написання простого bash-скрипту для автоматизації завдань з використанням cron

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

1. Постановка задачі

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

Що ми хочемо зробити?

Ми будемо створювати bash-скрипт, який:

  1. Перевіряє доступність вказаного сайту за допомогою ping.
  2. Записує результат перевірки у файл журналу, включаючи час та дату.
  3. Запускати цей скрипт автоматично кожні 5 хвилин за допомогою cron.

Чому це важливо?

У реальному світі моніторинг доступності веб-сайтів та серверів — одна з ключових задач системних адміністраторів. Наприклад, якщо ваш сайт (або сервер) раптово перестав відповідати, ви хочете дізнатися про це якомога раніше. Такий сценарій корисний не тільки для моніторингу, але й на співбесідах або в робочій практиці.


2. Крок 1: Написання простого bash-скрипта

Почнемо з написання основного bash-скрипта. Ось покрокове пояснення, що він буде робити:

  1. Ми задаємо адресу сайту, який потрібно перевіряти.
  2. Використовуємо ping для спроби відправлення запиту серверу.
  3. Перевіряємо, чи повернулася доступна відповідь.
  4. Зберігаємо результат у лог-файл.

Давайте створимо файл site_check.sh:

#!/bin/bash

# Визначаємо адресу вебсайту
WEBSITE="example.com"

# Файл для логування результатів
LOG_FILE="/var/log/site_status.log"

# Перевіряємо доступність сайту за допомогою ping
if ping -c 1 $WEBSITE &> /dev/null; then
    # Якщо сайт доступний
    echo "$(date): $WEBSITE доступний" >> $LOG_FILE
else
    # Якщо сайт недоступний
    echo "$(date): $WEBSITE недоступний" >> $LOG_FILE
fi

Пояснення коду:

  1. #!/bin/bash — вказує, що цей скрипт має виконуватися за допомогою Bash.
  2. WEBSITE="example.com" — адреса сайту, який потрібно перевіряти. Ви можете замінити example.com на будь-який сайт або сервер, який хочете моніторити.
  3. ping -c 1 $WEBSITE — відправляє один (-c 1) пакет на вказаний сайт. Якщо сайт відповідає, команда завершується з кодом 0. Якщо ні — з помилкою.
  4. &> /dev/null — перенаправляє стандартний вивід і помилки в "чорну діру" (ми не хочемо бачити вивід ping у консолі).
  5. $(date) — додає поточну дату і час у повідомлення.
  6. >> $LOG_FILE — дописує результат в кінець файлу логів.

3. Крок 2: Запуск скрипта вручну

Перш ніж автоматизувати виконання скрипта, давайте переконаємося, що він працює.

  1. Збережіть скрипт у файл site_check.sh.

  2. Зробіть його виконуваним:

    chmod +x site_check.sh
    
  3. Запустіть:

    sudo ./site_check.sh
    

Після виконання скрипта відкрийте файл /var/log/site_status.log, щоб переконатися, що результат перевірки доданий до логу. Використовуйте команду:

cat /var/log/site_status.log

Якщо все працює, ви побачите рядок на кшталт:

Mon Oct 30 14:35:22 UTC 2023: example.com is reachable

4. Крок 3: Налаштування автоматичного виконання за допомогою cron

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

Редагування crontab

Відкрийте редактор crontab:

crontab -e

Додайте наступний рядок:

*/5 * * * * /path/to/site_check.sh

Пояснення:

  • */5 — вказує, що задача повинна запускатися кожні 5 хвилин.
  • /path/to/site_check.sh — повний шлях до нашого скрипта. Переконайтеся, що він правильний. Наприклад, якщо скрипт знаходиться в домашній директорії користувача, шлях буде щось на кшталт /home/your_username/site_check.sh.

Після збереження змін cron почне запускати скрипт кожні 5 хвилин. Щоб переконатися, що задача додана, виконайте:

crontab -l

5. Крок 4: Перевірка роботи cron

Тепер перевіримо, чи працює автоматизація. Почекай 5-10 хвилин і знову відкрий файл логів:

cat /var/log/site_status.log

Ти повинен побачити нові записи, які оновлюються кожні 5 хвилин. Наприклад:

Mon Oct 30 14:35:22 UTC 2023: example.com is reachable
Mon Oct 30 14:40:22 UTC 2023: example.com is reachable
Mon Oct 30 14:45:22 UTC 2023: example.com is reachable

6. Розбір типових питань та помилок

  1. Ping повертає помилку 'Permission denied'

    Якщо ти запускаєш скрипт від імені звичайного користувача, можливо, у нього недостатньо прав. Запусти скрипт із sudo або додай права на виконання.

  2. Файл логів не створюється

    Переконайся, що шлях до файлу логів (/var/log/site_status.log) вказаний правильно і твій користувач має права на запис у цю директорію. Якщо файлу немає, створи його вручну за допомогою:

    sudo touch /var/log/site_status.log
    sudo chmod 666 /var/log/site_status.log
    
  3. cron не запускає скрипт

    Перевір, чи працює служба cron:

    sudo systemctl status cron
    

    Вона має бути у статусі active (running). Якщо вона зупинена, запусти її:

    sudo systemctl start cron
    
  4. Скрипт не виконується через cron, але вручну працює

    Переконайся, що шлях до скрипта та всіх використовуваних файлів прописаний повністю. У cron-задачах змінні оточення (наприклад, $PATH) можуть бути іншими. Краще використовувати абсолютні шляхи.


7. Покращення та додаткові завдання

Фільтрація вебсайтів

Розширте скрипт так, щоб він перевіряв доступність кількох сайтів. Наприклад:

WEBSITES=("example.com" "google.com" "stackoverflow.com")
for SITE in ${WEBSITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$(date): $SITE is reachable" >> $LOG_FILE
    else
        echo "$(date): $SITE is unreachable" >> $LOG_FILE
    fi
done

Відправка сповіщень

Додайте відправку сповіщень, якщо сайт недоступний. Наприклад, використовуючи команду mail для відправки email:

# Сповіщення по email
if ! ping -c 1 $WEBSITE &> /dev/null; then
    echo "$WEBSITE is down!" | mail -s "Website Check Alert" your_email@example.com
fi

Циклічне логування

Обмежте розмір лог-файлу до, скажімо, 1 МБ. Якщо файл стає занадто великим, перейменуйте його (як архів) і починайте новий лог.


Вітаю! Тепер ти знаєш, як використовувати bash-скрипти та cron для автоматизації реальних задач. Ці навички особливо затребувані для DevOps-інженерів і системних адміністраторів.

1
Опитування
Сервіси Linux, рівень 3, лекція 6
Недоступний
Сервіси Linux
Сервіси Linux
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ