Автоматизація запуску скрипта через cron
Автоматизація запуску скрипта через cron

У попередніх статтях “Частина 1. Резервне копіювання бази” та “Частина 2. Резервне копіювання файлів FTP” були розглянуті способи резервного копіювання сайту. Тепер розглянемо, як автоматизувати цей процес за допомогою утиліти cron.

1. Резервне копіювання бази
2. Резервне копіювання файлів по FTP
3. Автоматизація запуску за допомогою cron

Програма cron у Linux

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

Демон cron запускається під час завантаження системи. Він перевіряє чергу завдань at та завдання, додані користувачами у crontab. Демон перевіряє каталог /var/spool/cron/ на наявність файлів crontab. Кожен користувач, що вказаний у /etc/passwd, може мати лише один відповідний йому файл crontab.

Редагування списку завдань

Основні команди для роботи з crontab:

  • -e — редагування списку завдань поточного користувача.
  • -u username -e — редагування списку завдань іншого користувача (наприклад, sudo crontab -u root -e).
  • -u username -l — перегляд списку завдань користувача.
  • -u username -r — видалення списку завдань користувача.
  • -e (з змінною VISUAL або EDITOR) — використання певного редактора для редагування crontab.

Формат запису у crontab

Кожен запис у файлі crontab займає один рядок і містить шість полів:

Хвилина Година День_місяця Місяць День_тижня Команда

Допустимі значення:

  • Хвилина: 0–59
  • Година: 0–23
  • День місяця: 1–31
  • Місяць: 1–12 (або трьохбуквенні скорочення, наприклад: jan, feb, mar тощо)
  • День тижня: 0–6 (де 0 — неділя, можна також використовувати sun, mon, tue тощо)

Дні тижня та місяця у трьохбуквеному варіанті записуються наступним чином:

sun mon tue wed thu fri sat
jan feb mar apr May jun jul aug sep oct nov dec

Скорочені змінні для запуску завдань:

  • @reboot — запуск під час завантаження системи
  • @yearly — раз на рік (0 0 1 1 *)
  • @monthly — раз на місяць (0 0 1 * *)
  • @weekly — раз на тиждень (0 0 * * 0)
  • @daily — раз на день (0 0 * * *)
  • @midnight — опівночі (0 0 * * *)
  • @hourly — щогодини (0 * * * *)

Кожне з полів дати і часу може бути позначене символом *, відповідатиме будь-якому можливому значенню. Для цих полів можна вказувати діапазони значень, розділених дефісом, наприклад:

Друк HELLO о 5:00 на 4,5,6,7,8,9,10 дні січня, лютого, березня та квітня:

* 5 4-10 0-3 * echo "HELLO"

Друк HELLO кожну парну годину, щосуботи (три способи):

* */2 * * sat echo "HELLO"
* 0,2,4,6,8,10,12,14,16,18,20,22 * * sat echo "HELLO"
* 0-23/2 * * sat echo "HELLO"

Перенаправлення виводу crontab

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

  • >/path/to/file 2>&1 — запис stdout і stderr у файл.
  • >/dev/null 2>&1 — ігнорування будь-якого виводу.
0 2 * * * /usr/bin/python3 /home/user/script.py >/home/user/log.txt 2>&1

Автоматизація скриптів резервного копіювання

Таким чином, скрипти, що виконують резервне копіювання, розглянуті в попередніх статтях, можна автоматизувати подібним чином:

0 0 * * wed,sat  /usr/bin/curl 'http://YUORDOMAIN/filepath/backup.php' > /tmp/db-backup.log > /dev/null 2>&1
0 1 * * wed,sat /etc/init.d/rsync_yourdomain

Тобто, опівночі кожної середи та суботи буде віддалено запускатися скрипт бекапа бази, а потім через годину, о першій ночі, будуть синхронізуватися файли по FTP.

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

Від Тетяна

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *